@@ -143,13 +143,24 @@ func (c *Client) DeleteDatabase(ctx context.Context, dbName string) error {
143143 return err
144144}
145145
146- func (c * Client ) GrantDatabase (ctx context.Context , dbName string , principalName string , privilege string ) error {
146+ func transformPrivilege (privilege string ) string {
147+ return strings .ReplaceAll (privilege , "-" , "" )
148+ }
149+
150+ func (c * Client ) GrantDatabase (ctx context.Context , dbName string , principalName string , privilege string , isGrant bool ) error {
147151 l := ctxzap .Extract (ctx )
148152 l .Debug ("granting database" , zap .String ("dbName" , dbName ), zap .String ("principalName" , principalName ), zap .String ("privilege" , privilege ))
149153
150154 sanitizedDbName := pgx.Identifier {dbName }.Sanitize ()
151155 sanitizedPrincipalName := pgx.Identifier {principalName }.Sanitize ()
152- q := fmt .Sprintf ("GRANT %s ON DATABASE %s TO %s" , privilege , sanitizedDbName , sanitizedPrincipalName )
156+ sanitizedPrivilege := pgx.Identifier {transformPrivilege (privilege )}.Sanitize ()
157+ var q string
158+ if isGrant {
159+ q = fmt .Sprintf ("GRANT %s ON DATABASE %s TO %s WITH GRANT OPTION" , sanitizedPrivilege , sanitizedDbName , sanitizedPrincipalName )
160+ } else {
161+ q = fmt .Sprintf ("GRANT %s ON DATABASE %s TO %s" , sanitizedPrivilege , sanitizedDbName , sanitizedPrincipalName )
162+ }
163+
153164 _ , err := c .db .Exec (ctx , q )
154165 return err
155166}
@@ -159,7 +170,13 @@ func (c *Client) RevokeDatabase(ctx context.Context, dbName string, target strin
159170
160171 sanitizedDbName := pgx.Identifier {dbName }.Sanitize ()
161172 sanitizedTarget := pgx.Identifier {target }.Sanitize ()
162- q := fmt .Sprintf ("REVOKE %s ON DATABASE %s FROM %s" , privilege , sanitizedDbName , sanitizedTarget )
173+ sanitizedPrivilege := pgx.Identifier {transformPrivilege (privilege )}.Sanitize ()
174+ var q string
175+ if isGrant {
176+ q = fmt .Sprintf ("REVOKE GRANT OPTION for %s ON DATABASE %s FROM %s" , sanitizedPrivilege , sanitizedDbName , sanitizedTarget )
177+ } else {
178+ q = fmt .Sprintf ("REVOKE %s ON DATABASE %s FROM %s" , sanitizedPrivilege , sanitizedDbName , sanitizedTarget )
179+ }
163180
164181 l .Debug ("revoking role from member" , zap .String ("query" , q ))
165182 _ , err := c .db .Exec (ctx , q )
0 commit comments