默认权限#

OushuDB 允许为特定的用户、角色、schema定义默认的访问权限。

描述#

ALTER DEFAULT PRIVILEGES 允许用户设置应用到以后创建的对象的权限(不影响已经分配给已经存在对象的权限)。目前只有表(包括视图)、序列和函数的权限能够设置默认权限。

用户可以修改自己创建的或者成员角色创建的对象的默认权限。这个权限允许被设置成全局的(当前数据库下所有的对象),或者只是给指定模式中创建的对象。

用法与参数#

ALTER DEFAULT PRIVILEGES
    [FOR {ROLE | USER} target_role [,..]]
    [IN SCHEMA schema_name [,..]]
    grant_or_revoke_stmt
    
    where grant_or_revoke_stmt is one of:
    GRANT { {SELECT | INSERT| UPDATE| DELETE} [,...]
        | ALL }
        ON TABLE 
            TO {role_name| PUBLIC} [,...] [WITH GRANT OPTION]

    GRANT {{USAGE|SELECT|UPDATE} [,...] | ALL}
        ON SEQUENCE
        TO {role_name | PUBLIC } [,...] [WITH GRANT OPTION]
        
    GRANT {EXECUTE | ALL}
        ON FUNCTION 
        TO  {role_name | PUBLIC } [,...]  [WITH GRANT OPTION ]
                                           
    REVOKE { {SELECT | INSERT| UPDATE| DELETE} [,...]
        | ALL }
        ON TABLE 
            FROM {role_name| PUBLIC} [,...] [CASCADE]

    REVOKE {{USAGE|SELECT|UPDATE} [,...] | ALL}
        ON SEQUENCE
        FROM {role_name | PUBLIC } [,...]  [CASCADE]
        
    GRANT {EXECUTE | ALL}
        ON FUNCTION 
        FROM  {role_name | PUBLIC } [,...]  [CASCADE]

target_role : 已经存在的角色名称.如果未指定则标识为当前用户。 schema_name : 已经存在的模式名称。如果未指定则标识为当前数据库。 role_name : 已经存在的用来授权或者撤销授权的角色名称。

示例#

给后来在模式 myschema 里创建的所有的表授予 SELECT 权限,并允许角色 webuser 对他们执行INSERT :

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLE TO PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLE TO webuser;

撤销上面的操作,因此后来创建的表不再会拥有默认的权限:

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE SELECT ON TABLE FORM PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE INSERT ON TABLE FROM webuser;

为角色 admin 之后创建的所有函数,移除那些通常授权在函数上的公共 EXECUTE 权限:

ALTER DEFAULT PRIVILEGES FOR ROLE admin REOVKE EXECUTE ON FUNCTION FROM PUBLIC;