Postgres数据库中创建模式的权限

本文介绍了在Postgres数据库中如何管理创建模式的权限。首先,超级用户可以创建schema,而普通用户默认无此权限。然后,通过将'create'权限授予普通用户,该用户便能在指定数据库上创建schema。最后,演示了如何回收用户的创建权限。

数据库中创建模式的权限

(1)使用超级用户highgo可以创建schema,但使用普通用户a默认无法创建角色

highgo=#\du

                             List of roles

 Role name |                   Attributes                   | Member of

-----------+------------------------------------------------+-----------

 a        |                                               | {}

 highgo   | Superuser, Create role, Create DB, Replication | {}

 

highgo=#select current_user;

 current_user

--------------

 a

(1row)

 

highgo=#create schema test1;

错误:  对数据库 highgo 权限不够

 

highgo=#\c highgo highgo

Youare now connected to database "highgo" as user "highgo".

highgo=#select current_user;

 current_user

--------------

 highgo

(1row)

 

highgo=#create schema test1;

CREATESCHEMA

(2)在数据库highgo上将create权限赋予a,用户a即可在数据库highgo上创建schema

highgo=#grant create on database highgo to a;

GRANT

highgo=#\c highgo a

Youare now connected to database "highgo" as user "a".

highgo=>create schema test2;

CREATESCHEMA

highgo=>\dn

     List of schemas

      Name     | Owner 

----------------+--------

 hgdb_catalog  | highgo

 oracle_catalog | highgo

 public        | highgo

 test2          | a

(4rows)

(3)回收用户a在highgo数据库上的create权限

highgo=#revoke create on database highgo from a;

REVOKE
PostgreSQL 中,授予用户创建表的权限通常需要通过授予其对特定模式(schema)的 `CREATE` 权限来实现。PostgreSQL 中的权限管理机制支持对象级别的控制,因此表的创建权限是与模式绑定的,而不是数据库级别或全局级别。 要授予用户在某个模式创建表的权限,可以使用 `GRANT` 语句。例如,授予用户 `new_user` 在模式 `public` 中创建表的权限,可以执行以下命令: ```sql GRANT CREATE ON SCHEMA public TO new_user; ``` 如果希望用户在指定模式下拥有更广泛的权限(如对表的 `SELECT`, `INSERT`, `UPDATE`, `DELETE` 等),可以结合 `GRANT` 命令与对象权限的设置。例如,为用户授予模式 `public` 下所有表的全部权限: ```sql GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO new_user; ``` 此外,PostgreSQL 支持默认权限的设置,可以用于定义新创建对象的默认访问权限。例如,为模式 `public` 下未来创建的所有表设置默认权限,授予用户 `new_user` 所有权限: ```sql ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO new_user; ``` 这种机制可以确保用户在模式创建的新表自动继承这些权限设置,而无需手动重复授权[^1]。 需要注意的是,若用户需要在特定数据库创建模式或执行其他管理操作,则可能需要授予更高权限,例如 `CREATE` 数据库权限或 `SUPERUSER` 权限。但这些权限应谨慎分配,因为它们涉及更广泛的系统控制能力。 ### 验证权限 为了验证用户是否已被正确授予创建表的权限,可以查询系统目录表 `pg_namespace` 和 `pg_roles` 来查看模式与用户权限信息。例如,查询模式 `public` 的权限设置: ```sql SELECT grantee, privilege_type FROM information_schema.schema_privileges WHERE table_schema = 'public'; ``` 通过这种方式,可以确认用户是否具备在指定模式创建表的能力。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值