首页 > 数据库 >52 openEuler搭建PostgreSQL数据库服务器-管理数据库角色

52 openEuler搭建PostgreSQL数据库服务器-管理数据库角色

时间:2023-04-11 21:02:36浏览次数:40  
标签:... PostgreSQL postgres 角色 GRANT 数据库 52 rolename 权限

52 openEuler搭建PostgreSQL数据库服务器-管理数据库角色

52.1 创建角色

可以使用CREATE ROLE语句或createuser来创建角色。createuser是对CREATE ROLE命令的封装,需要在shell界面执行,而不是在数据库界面。

CREATE ROLE rolename [ [ WITH ] option [ ... ] ];
createuser rolename

其中:

  • rolename:角色名。
  • option为参数选项,常用的有:
    • SUPERUSER | NOSUPERUSER:决定一个新角色是否为"超级用户",若未指定,则默认为NOSUPERUSER,即不是超级用户。
    • CREATEDB | NOCREATEDB:定义一个角色是否能创建数据库,若未指定,则默认为NOCREATEDB,即不能创建数据库。
    • CREATEROLE | NOCREATEROLE:决定一个角色是否可以创建新角色,若未指定,则默认为NOCREATEROLE,即不能创建新角色。
    • INHERIT | NOINHERIT:决定一个角色是否"继承"它所在组的角色的权限。一个带有 INHERIT 属性的角色可以自动使用已经赋与它直接或间接所在组的任何权限。若未指定,则默认为INHERIT。
    • LOGIN | NOLOGIN:决定一个角色是否可以登录,一个拥有LOGIN属性的角色可以认为是一个用户,若无此属性的角色可以用于管理数据库权限,但是并不是用户,若未指定,则默认为NOLOGIN。但若创建角色是使用的是CREATE USER而不是CREATE ROLE,则默认是LOGIN属性。
    • [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password':设置角色的密码,密码只对那些拥有 LOGIN 属性的角色有意义。ENCRYPTED | UNENCRYPTED表示是否对密码进行加密,若未指定,则默认为ENCRYPTED,即加密。
    • VALID UNTIL 'timestamp':角色的密码失效的时间戳,若为指定,则表示密码永久有效。
    • IN ROLE rolename1:列出一个或多个现有的角色,新角色rolename将立即加入这些角色,成为rolename1的成员。
    • ROLE rolename2:列出一个或多个现有的角色,它们将自动添加为新角色rolename的成员,即新角色为"组"。

要使用这条命令,必须拥有 CREATEROLE 权限或者是数据库超级用户。

创建角色示例

创建一个可以登录的角色roletest1。

postgres=# CREATE ROLE roletest1 LOGIN;
CREATE ROLE
postgres=#

创建一个密码为123456的角色roletest2。

postgres=# CREATE ROLE roletest2 WITH LOGIN PASSWORD '123456';
CREATE ROLE
postgres=#

创建角色名为roletest3的角色。。

[postgres@superman-21 ~]$ createuser roletest3
[postgres@superman-21 ~]$ 

52.2 查看角色

可以使用SELECT语句或psql的元命令\du查看角色。

SELECT rolename FROM pg_roles;
\du

其中:rolename:角色名。

查看角色示例

查看所有角色名。

postgres=# SELECT rolname from pg_roles;
          rolname          
---------------------------
 pg_monitor
 pg_read_all_settings
 pg_read_all_stats
 pg_stat_scan_tables
 pg_read_server_files
 pg_write_server_files
 pg_execute_server_program
 pg_signal_backend
 postgres
 roletest1
 roletest2
 roletest3
(12 行记录)

postgres=# 

查看现有角色。

postgres=# \du
                             角色列表
 角色名称  |                    属性                    | 成员属于 
-----------+--------------------------------------------+----------
 postgres  | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
 roletest1 |                                            | {}
 roletest2 |                                            | {}
 roletest3 |                                            | {}

postgres=# 

52.3 修改角色

52.3.1 修改用户名

可以使用ALTER ROLE语句修改一个已经存在的角色名。

ALTER ROLE oldrolername RENAME TO newrolename;

其中:

  • oldrolername:旧的角色名。
  • newrolename:新的角色名。

52.3.2 修改用户示例

将角色名roletest1修改为roletest4。

postgres=# ALTER ROLE roletest1 RENAME TO roletest4;
ALTER ROLE
postgres=# 

52.3.3 修改用户密码

可以使用ALTER ROLE语句修改一个角色的登录密码。

ALTER ROLE rolename PASSWORD 'password'

其中:

  • rolename:角色名。
  • password:密码。

52.3.4 修改角色密码示例

将roletest2的密码修改为456789。

postgres=# ALTER ROLE roletest2 WITH PASSWORD '456789';
ALTER ROLE
postgres=# 

52.4 删除角色

可以使用DROP ROLE语句或dropuser来删除角色。dropuser是对DROP ROLE命令的封装,需要在shell界面执行,而不是在数据库界面。

DROP ROLE rolename;
dropuser rolename

其中:rolename:角色名。

删除角色示例

删除roletest2角色。

postgres=# DROP ROLE roletest2;
DROP ROLE
postgres=# 

删除roletest3角色。。

[postgres@superman-21 ~]$ dropuser roletest3
[postgres@superman-21 ~]$ 

52.5 角色授权

可以使用GRANT语句来对角色授权。

对角色授予表的操作权限:

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]

对角色授予序列的操作权限:

GRANT { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] 

对角色授予数据库的操作权限:

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]  

对角色授予函数的操作权限:

GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]  

对角色授予过程语言的操作权限:

GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]  

对角色授予模式的操作权限:

GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]  

对角色授予表空间的操作权限:

GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] TO { rolename | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ] 

将角色rolename1的成员关系赋予角色rolename2:

GRANT rolename1 [, ...] TO rolename2 [, ...] [ WITH ADMIN OPTION ]

其中:

  • SELECT、INSERT、UPDATE、DELETE、REFERENCES、TRIGGER、USAGE、CREATE、CONNECT、TEMPORARY、TEMP、EXECUTE、ALL [ PRIVILEGES ]:用户的操作权限,ALL [ PRIVILEGES ]表示所有的权限,PRIVILEGES 关键字在 PostgreSQL 里是可选的,但是严格的 SQL 要求有这个关键字。
  • ON字句:用于指定权限授予的对象。
  • tablename:表名。
  • TO字句:用来指定被赋予权限的角色。
  • rolename、rolename1、rolename2:角色名。
  • groupname:角色组名。
  • PUBLIC:表示该权限要赋予所有角色,包括那些以后可能创建的用户。
  • WITH GRANT OPTION:表示权限的接收者也可以将此权限赋予他人,否则就不能授权他人。该选项不能赋予给PUBLIC。
  • sequencename:序列名。
  • databasename:数据库名。
  • funcname ( [ [ argmode ] [ argname ] argtype [, …] ] ):函数名及其参数。
  • langname:过程语言名。
  • schemaname:模式名。
  • tablespacename:表空间名。
  • WITH ADMIN OPTION:表示成员随后就可以将角色的成员关系赋予其它角色,以及撤销其它角色的成员关系。

角色授权示例

对roletest4授予数据库database1的CREATE权限。

postgres=# GRANT CREATE ON DATABASE postgres TO roletest4;
GRANT
postgres=#

对所有用户授予表t1的所有权限。

postgres=# GRANT ALL PRIVILEGES ON TABLE t1 TO PUBLIC; 
GRANT
postgres=# 

52.6 删除用户权限

可以使用REVOKE语句来撤销以前赋予一个或多个角色的权限。

撤销角色对表的操作权限:

REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...]

撤销角色对序列的操作权限:

REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequencename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]  

撤销角色对数据库的操作权限:

REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE databasename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] 

撤销角色对函数的操作权限:

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] 

撤销角色对过程语言的操作权限:

REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE langname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] 

撤销角色对模式的操作权限:

REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schemaname [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ]  

撤销角色对表空间的操作权限:

REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespacename [, ...] FROM { rolename | GROUP groupname | PUBLIC } [, ...] [ CASCADE | RESTRICT ] 

删除rolename2的rolename1的成员关系:

REVOKE [ ADMIN OPTION FOR ] rolename1 [, ...] FROM rolename2 [, ...] [ CASCADE | RESTRICT ]

其中:

  • GRANT OPTION FOR:表示只是撤销对该权限的授权的权力,而不是撤销该权限本身。
  • SELECT、INSERT、UPDATE、DELETE、REFERENCES、TRIGGER、USAGE、CREATE、CONNECT、TEMPORARY、TEMP、EXECUTE、ALL [ PRIVILEGES ]:用户的操作权限,ALL [ PRIVILEGES ]表示所有的权限,PRIVILEGES关键字在 PostgreSQL里是可选的,但是严格的SQL 要求有这个关键字。
  • ON字句:用于指定撤销权限的对象。
  • tablename:表名。
  • FROM字句:用来指定被撤销权限的角色。
  • rolename、rolename1、rolename2:角色名。
  • groupname:角色组名。
  • PUBLIC:表示撤销隐含定义的、拥有所有角色的组,但并不意味着所有角色都失去了权限,那些直接得到的权限以及通过一个组得到的权限仍然有效。
  • sequencename:序列名。
  • CASCADE:撤销所有依赖性权限。
  • RESTRICT:不撤销所有依赖性权限。
  • databasename:数据库名。
  • funcname ( [ [ argmode ] [ argname ] argtype [, …] ] ):函数名及其参数。
  • langname:过程语言名。
  • schemaname:模式名。
  • tablespacename:表空间名。
  • ADMIN OPTION FOR:表示传递的授权不会自动收回。

删除用户权限示例

对roletest4授予数据库postgres的CREATE权限。

postgres=# GRANT CREATE ON DATABASE postgres TO roletest4; 
GRANT
postgres=#

对所有用户授予表pg_proc的所有权限。

postgres=# GRANT ALL PRIVILEGES ON TABLE pg_proc TO PUBLIC;
GRANT
postgres=# 

标签:...,PostgreSQL,postgres,角色,GRANT,数据库,52,rolename,权限
From: https://blog.51cto.com/u_237826/6183896

相关文章

  • 数据库管理平台archery搭建
    #######################################archery是一款Django+Python+Bootstrap的Web应用搭建archery并不是一件简单的事,要想搭建一个高可用,需要做更多MySQLRedisGolangPythonkeepalived               ##############################......
  • TDSQL 是什么?腾讯推出的分布式数据库 TDSQL 简介
    TDSQL是什么?腾讯推出的分布式数据库TDSQL简介 0BY 董德多 ON 2022年5月12日数据库分布式数据库(TencentDistributedSQL,以下简称TDSQL)是腾讯打造的一款企业级数据库产品,具备强一致高可用、全球部署架构、高SQL兼容度、分布式水平扩展、高性能、完整的分布式事务支......
  • jmeter数据库连接6
    1,准备资料1.一个可用的数据库2.连接数据库需要的驱动2,jmeter连接数据库3,发送插入语句请求4,发送查询语句请求5,发送删除语句请求6,对数据库进行压测本文永久更新地址:1,准备资料1.一个可用的数据库搭建一个mysql8.0的数据库环境,并设置数据库可以远程访问docker......
  • pymysql 操作数据库
    一、数据库操作应用场景1、检验测试数据接口发送请求后明确会对数据库中的某个字段进行修改,但响应结果中无该字段数据时。如:ihrm删除员工接口。is_delete字段,没有在响应结果中出现!需要借助数据库校验!2、构造测试数据测试数据使用一......
  • SQLServer 客户端链接服务器到Oracle数据库 全攻略
    引言和第三方公司进行接口对接时,发现某一个模块第三方只提供一个视图,还让我们直接调用他们数据库......
  • Linux 上 定时备份 postgresql 数据库
    Linux上定时备份postgresql数据库为了避免操作数据库的风险因此计划每天对postgresql数据库进行定时备份1.服务器地址:备份服务器地址10.10.10.101(虚构)postgresql数据库所在的服务器地址10.10.10.100(虚构)因为我有单独的备份数据库不在同一个服务器上操作首先要保证这......
  • Python 链接数据库,快速操作数据库类。让你操作数据库so so 的
    importpymysqlclassDatabaseHandler:def__init__(self):self.db=pymysql.connect(host='127.0.0.1',user='root',db='test')#创建游标对象self.cursor=self.db.cursor()#def__del__(self):......
  • Oracle Database 23c Free - Developer Release(免费的 Oracle 数据库开发者版本)
    免费的Oracle数据库开发者版本请访问原文链接:https://sysin.org/blog/oracle-database-23c-free/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgOracleDatabase23cFree-DeveloperRelease是一个全新的、免费的、业界领先的Oracle数据库,全世界各个行业的企......
  • R语言-连接MySQL数据库方法
    #2R语言-连接MySQL数据库方法#####2.1方法1:使用R数据库接口连接数据库#####使用RMySQL包install.packages('RMySQL')library(RMySQL)#有两种方式操作#2.1.1使用dbConnect####conn<-dbConnect(MySQL(),dbname="smartbi_data",        ......
  • 数据库连接池
    selectcount(*)fromv$process;--3622selectvaluefromv$parameterwherename='processes';selectcount(*)fromv$sessionwherestatus='ACTIVE';selectusername,a.*fromv$sessionawhereusernameisnotnullorderbya.siddesc......