PostgreSQL创建只读角色

本文指导如何在PostgreSQL中创建只读角色,授予对公共schema的表使用权,并为新表和用户zhangyou设置默认权限。涉及步骤包括创建角色、权限分配及用户权限设置。

# 1.创建只读角色(需要使用\c命令切换到postgres中执行)
CREATE ROLE readonlyrole;

# 2.授予对现有表的访问权限(需要使用\c命令切换到具体的数据库中执行)

GRANT USAGE ON SCHEMA public TO readonlyrole;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonlyrole;

# 3. 授予后面新增表的访问权限(需要使用\c命令切换到具体的数据库中执行)
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonlyrole;

# 4. 创建用户(完成对所有数据库的以上第2和3步操作后执行)
CREATE USER zhangyou WITH PASSWORD '!QAZ2wsx';
GRANT readonlyrole TO zhangyou;

不同数据库创建只读角色的方法有所不同,以下是几种常见数据库创建只读角色的方式: ### PostgreSQL - **软锁定方式创建整个实例的只读用户**:可通过设置参数 `default_transaction_read_only` 来实现。先创建一个具有超级用户权限的用户,再将其设置为只读。示例代码如下: ```sql drop owned by u_readonly; drop user IF EXISTS u_readonly; -- 创建只读用户:授予所有权限(管理员)再将其设置为只读用户(整个实例的只读用户) create user u_readonly Superuser password 'Test@123'; alter user u_readonly set default_transaction_read_only = on; ``` 不过这种方式存在安全隐患,在开启事务的场景下可以调整事务的读写权限,如使用 `begin; set TRANSACTION READ WRITE;` 后就有写权限了 [^1]。 - **创建单个数据库只读用户**:将库的所有者的权限给予只读用户,然后设置 `default_transaction_read_only` 为 `on`。示例代码如下: ```sql create user u_readonly password 'Test@123'; grant db_user to u_readonly; alter user u_readonly set default_transaction_read_only = on; \c - u_readonly ``` 这种方式是推荐使用的 [^1]。 - **硬锁定方式**:直接将数据库切换到恢复模式(备库),可确保绝对不会有写操作出现 [^1]。 ### SQL Server 将用户添加到 `db_datareader` 角色,使其能够查询数据库中的所有数据,但无法进行修改。示例代码如下: ```sql -- 将用户添加到 db_datareader 角色 EXEC sp_addrolemember N'db_datareader', N'zhidu_os'; GO ``` 还可根据需求限制其他权限 [^2]。 ### 另一种 SQL 数据库创建只读用户方法 在右侧的【用户映射】选项卡中,【映射到此登录名的用户】选择该用户可以操作的数据库。针对每一个数据库,在下方【数据库角色成员身份】中,选择【db_datareader】,同时默认架构中也选择【db_datareader】 [^3]。 ### Oracle 可借助视图、触发器、事务、存储过程、函数、流程控制等方式来实现数据库只读的相关设置,但引用中未详细给出具体创建只读角色的代码实现 [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值