更新时间:2024-09-12 GMT+08:00
权限设计规范
- 业务使用前必须由root用户为业务创建DATABASE、SCHEMA和USER,然后再赋予相关用户对应对象的权限。
如果该用户不是该schema的owner,要访问schema下的对象,需要同时给用户赋予schema的usage权限和对象的相应权限。
- DATABASE、SCHEMA和USER名使用小写。
由于数据库默认会把对象名称转为小写,连接串里面如果出现大写的对象名无法连接到数据库。如create user MyUser;创建的用户,无法使用user=MyUser连接到数据库,需要用user=myuser才能连接到数据库。为了避免混淆,一律使用小写。
- 合理对角色和用户赋权,应使用最小化权限原则。
表1 数据库对象权限及说明 对象
权限
说明
数据库
DATABASE
CONNECT
允许用户连接到指定的数据库。
TEMP
-
CREATE
允许在数据库里创建新的模式。
模式
SCHEMA
CREATE
允许在模式中创建新的对象。
USAGE
允许访问包含在指定模式中的对象,若没有该权限,则只能看到这些对象的名字。
函数
FUNCTION
EXECUTE
允许使用指定的函数,以及利用这些函数实现的操作符。
表空间
TABLESPACE
CREATE
允许在表空间中创建表,允许在创建数据库和模式的时候把该表空间指定为缺省表空间。
表
TABLE
INSERT,DELETE UPDATE,SELECT
允许用户对指定表进行增删改查操作。
TRUNCATE
允许执行TRUNCATE语句删除指定表中的所有记录。
REFERENCES
创建一个外键约束,必须拥有参考表和被参考表的REFERENCES权限。
- 通过角色而不是用户来管理权限。
通过角色管理权限,更便于多用户、用户变更等场景下的权限管理。例如:
- 角色和用户为多对多关系,一个角色可以赋予多个用户,修改角色中的权限,被赋予角色的用户权限就可以同时更新。
- 删除用户时,不会影响到角色。
- 新建用户后可以通过赋予角色快速获取所需权限。
- 在删除指定数据库时,应回收用户对该数据库的CONNECT权限,避免删除时仍然存在活跃的数据库连接而失败。