达梦数据库,设置表的访问控制权限

本文围绕DM数据库表访问权限配置展开,以DM8为测试环境,详细介绍了配置过程。包括创建测试用户、查看用户角色和权限、创建测试表、测试用户访问表情况,还说明了收回权限和重新赋予特定表权限的操作,最终完成表访问控制权限配置。

大家都会遇到这样的场景,出于对数据库访问安全的考虑,对于某些用户我们不想让他们看到全库的表,只想给他们特定表的访问权限。那么在DM数据库中我们该如何去配置相应的权限呢?  我们下面来进行详细解析。 我们的测试环境是DM8

1、我们首先来建立一个测试用户test;

SQL>create user test identified by test123456;

2、接下来看一下TEST用户相应的角色和权限。

SQL>Select grantee,granted_role from dba_role_privs where grantee=‘TEST’;

默认是public角色。查看一下public角色所拥有的权限。

SQL>Select grantee,privilege from dba_sys_privs where grantee=‘PUBLIC’;

Public角色默认拥有当前用户下所有表的insert,update,delete,select,grant……权限

3、我们来建两个测试表。在sysdba用户下创建一个T1表,test用户下创建T2表。

SQL>Create table sysdba.t1 (id int,name varchar(20));

SQL>Insert into sysdba.t1 values (1,’sysdba’);

SQL>Commit;

SQL>Create table test.t2(id int,name varchar(20));

SQL>Insert into test.t2 values(2,’test’);

SQL>Commit;

4、使用test用户登录数据库,访问相应的表。

[dmdba@NeoKylin6-dm8 ~]$ disql test/test123456

SQL> select * from sysdba.t1;

SQL> select * from t2;

Test用户只能访问本用户下的t2表,不能访问sysdba用户下的t1表。

5、下面我们收回test的public权限,以sysdba用户登录执行。

SQL>Revoke  public  from test;

我们再查询一下test用户的访问权限

我们看到test用户的public权限已被收回。再以test用户登录进行查询,发现test.t2表的访问权限已经没有了,sysdba.t1表的访问权限也已经没有了。

我们给test用户配置相应的表的权限,比如我们只给test用户查看sysdba.t1的权限:SQL>Grant select on sysdba.t1 to test;

用test用户登录,我们可以查询sysdba.t1表的数据,但是却查询不了test.t2表的数据,因为我们没有赋给test用户,test.t2的查询权限,那怕t2表是test用户下的表。

这样我们表的访问控制权限就配置完成了。

### 在达梦数据库中实现用户级或进程级的访问控制策略 #### 1. 用户级访问控制策略 用户级访问控制策略的核心在于通过权限管理来限制用户的操作范围。以下是实现方法: - **创用户并分配资源** 创用户时,可以为其分配默认空间和临时空间,并限制其资源使用。例如: ```sql CREATE USER test_user IDENTIFIED BY "password" DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; ``` 这一操作确保了用户在特定的存储范围内活动[^2]。 - **授予最小权限** 仅授予用户完成任务所需的最小权限。例如,如果用户只需要查询数据,则只需授予 `SELECT` 权限: ```sql GRANT SELECT ON schema_name.table_name TO test_user; ``` 如果需要执行其他操作(如插入、更新或删除),则可以分别授予相应的权限: ```sql GRANT INSERT, UPDATE, DELETE ON schema_name.table_name TO test_user; ``` - **角色管理** 使用角色将权限集合化,便于管理和分配。例如: ```sql CREATE ROLE data_reader; GRANT SELECT ON schema_name.table_name TO data_reader; GRANT data_reader TO test_user; ``` 角色的使用简化了权限管理流程,同时提高了安全性[^2]。 - **强制访问控制(MAC)** 达梦数据库支持强制访问控制(MAC),可以通过应用策略限制用户对特定的访问。例如: ```sql EXEC mac_apply_table_policy('策略名', '模式名', '名', '标记列名', '初始化标记', 0); ``` 此外,还可以为用户设置访问级别、范围和组: ```sql EXEC mac_user_set_levles('策略名', '用户名', '最大等级', '最小等级', '默认等级', '行等级'); ``` #### 2. 进程级访问控制策略 进程级访问控制策略主要通过线程管理和资源限制来实现。以下是具体方法: - **线程管理** 达梦数据库采用单进程多线程架构,其中不同的线程负责不同的任务。例如,`checkpoint` 线程定期将内存中的数据刷写到磁盘以确保持久性;`I/O` 线程处理数据读写操作;`监听线程` 负责客户端连接请求;`日志写线程` 记录事务日志等[^1]。 通过合理配置这些线程的优先级和资源分配,可以实现对进程级访问的精细化控制。 - **资源限制** 可以为用户设置连接空闲时间、失败登录尝试次数、密码有效期等限制,从而间接控制进程级访问: ```sql ALTER USER "CCC" LIMIT CONNECT_IDLE_TIME 10, FAILED_LOGIN_ATTEMPTS 5, PASSWORD_LIFE_TIME 100, PASSWORD_LOCK_TIME 10, CONNECT_TIME 10; ``` 此外,还可以通过配置系统参数来限制每个会话的最大内存使用量或其他资源消耗[^1]。 - **审计功能** 启用审计功能可以帮助监控进程级活动,及时发现异常行为。例如: ```sql AUDIT ALL ON schema_name.table_name BY test_user; ``` 审计日志记录了用户的操作细节,有助于分析和优化访问控制策略[^2]。 #### 3. 配置示例 以下是一个综合配置示例,展示如何结合用户级和进程级访问控制策略: ```sql -- 创用户并分配资源 CREATE USER app_user IDENTIFIED BY "secure_password" DEFAULT TABLESPACE app_data TEMPORARY TABLESPACE temp; -- 授予最小权限 GRANT SELECT, INSERT, UPDATE ON app_schema.app_table TO app_user; -- 创角色并分配权限 CREATE ROLE app_role; GRANT SELECT, INSERT, UPDATE ON app_schema.app_table TO app_role; GRANT app_role TO app_user; -- 设置强制访问控制策略 EXEC mac_apply_table_policy('app_policy', 'app_schema', 'app_table', 'security_label', 'default_label', 0); EXEC mac_user_set_levles('app_policy', 'app_user', 'max_level', 'min_level', 'default_level', 'row_level'); -- 配置资源限制 ALTER USER app_user LIMIT CONNECT_IDLE_TIME 30, FAILED_LOGIN_ATTEMPTS 3, PASSWORD_LIFE_TIME 90, PASSWORD_LOCK_TIME 7; -- 启用审计功能 AUDIT ALL ON app_schema.app_table BY app_user; ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值