3 # Author: Petter Reinholdtsen <pere@td.org.uit.no>
6 # Make list of 'grant' commands based on current db permissions.
8 # Use './pg-show-db-access.pl |sort +5 +3' to get a nice list
11 print "$0 [dbname [dbhost]]\n";
14 use vars qw($dbhost $db $cmd);
16 ($db, $dbhost) = ("", "");
17 $db = $ARGV[0] if ( defined $ARGV[0] );
18 $dbhost = "-h $ARGV[1]" if ( defined $ARGV[1] );
20 $cmd = "psql -t -c \\\\z $dbhost $db";
22 open(CMD, "$cmd |") || die "Unable to execute \"$cmd\"";
26 my ($table, $perm) = m/\s+\|\s+(\w+)\s+\|\s+\{(.+)\}\s+\|/;
27 if ( defined $table ) {
28 my @perms = split(/,/, $perm);
30 my ($username, $access) = $perm =~ m/(\w*)=(\w+)/;
31 $username = "public" unless ($username);
32 if (defined $access) {
34 $ACL{SELECT} = 1 if ($access =~ m/r/);
35 $ACL{INSERT} = 1 if ($access =~ m/a/);
36 if ($access =~ m/w/) {
41 # XXX Not sure what 'R' means, skipping it
42 # $ACL{PLACE_RULES} = 1 if ($access =~ m/R/);
44 for $c (sort keys %ACL) {
45 print "GRANT $c ON $table TO $username;\n";