# 默认权限 OushuDB 允许为特定的用户、角色、schema定义默认的访问权限。 ## 描述 ALTER DEFAULT PRIVILEGES 允许用户设置应用到以后创建的对象的权限(不影响已经分配给已经存在对象的权限)。目前只有表(包括视图)、序列和函数的权限能够设置默认权限。 用户可以修改自己创建的或者成员角色创建的对象的默认权限。这个权限允许被设置成全局的(当前数据库下所有的对象),或者只是给指定模式中创建的对象。 ## 用法与参数 ```SQL 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 : ```SQL ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLE TO PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLE TO webuser; ``` 撤销上面的操作,因此后来创建的表不再会拥有默认的权限: ```sql 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 权限: ```sql ALTER DEFAULT PRIVILEGES FOR ROLE admin REOVKE EXECUTE ON FUNCTION FROM PUBLIC; ```