访问控制列表-SYS_ACLS
📄字数 3.5K
👁️阅读量 加载中...
功能描述
SYS_ACLS系统表用于管理数据库用户访问控制信息。
字段说明
序号 | 字段名 | 类型 | 说明 | V11 | V12 |
---|---|---|---|---|---|
0 | DB_ID | INTEGER | 库ID | √ | √ |
1 | GRANTOR_ID | INTEGER | 授权者ID | √ | √ |
2 | GRANTEE_ID | INTEGER | 被授权者ID | √ | √ |
3 | OBJECT_ID | INTEGER | 授权客体ID | √ | √ |
4 | OBJECT_TYPE | INTEGER | 授权客体类型 | √ | √ |
5 | AUTHORITY | BIGINT | 权限值 | √ | √ |
6 | REGRANT | BIGINT | 转授权 | √ | √ |
7 | ORG_GRANTOR_ID | INTEGER | 权限的原始拥有者 | √ | √ |
8 | IS_SYS | BOOLEAN | 是否系统内建 | √ | √ |
9 | RESERVED1 | VARCHAR | 保留字段 | √ | √ |
10 | RESERVED2 | VARCHAR | 保留字段 | √ | √ |
11 | RESERVED3 | VARCHAR | 保留字段 | √ | √ |
AUTHORITY
权限级别 | 权限 | 权限值 | 说明 |
---|---|---|---|
对象级 | ACL_READ | 0x1 | 读取权 |
对象级 | ACL_UPDATE | 0x2 | 更改权 |
对象级 | ACL_INSERT | 0x4 | 添加权 |
对象级 | ACL_DELETE | 0x8 | 删除权 |
对象级 | ACL_REF | 0x10 | 引用权 |
对象级 | ACL_EXECUTE | 0x20 | 执行权 |
对象级 | ACL_INDEX | 0x40 | 可创建索引 |
对象级 | ACL_ALTER | 0x80 | 修改对象结构权 |
对象级 | ACL_DROP | 0x100 | 删除对象权 |
对象级 | ACL_TRIG | 0x200 | 可在对象上创建触发器 |
对象级 | ACL_VACUUM | 0x400 | 可清多余空间 |
对象级 | ACL_TAB_ALL | 0x7df | 所有表(字段)级权 |
对象级 | ACL_PROC_ALL | 0x1a0 | 所有存储过程函数级权 |
对象级 | ACL_VIEW_ALL | 0x18f | 所有视图级权 |
对象级 | ACL_PACK_ALL | 0x1a0 | 所有包级权 |
对象级 | ACL_SEQ_ALL | 0x183 | 所有序列值级权 |
对象级 | ACL_UDT_ALL | 0x1a0 | 所有自定义数据类型级权 |
库级 | ACL_READ_ANY | 0x1 | 对任何指定类型对象(对象类型由obj_type确定)拥有读取权 |
库级 | ACL_UPDATE_ANY | 0x2 | 对任何指定类型对象(对象类型由obj_type确定)拥有更改权 |
库级 | ACL_INSERT_ANY | 0x4 | 对全部表拥有插入权 |
库级 | ACL_DELETE_ANY | 0x8 | 对全部表拥有删除权 |
库级 | ACL_REF_ANY | 0x10 | 对全部表拥有引用权 |
库级 | ACL_EXECUTE_ANY | 0x20 | 对全部过程拥有执行权 |
库级 | ACL_INDEX_ANY | 0x40 | 可创建索引 |
库级 | ACL_CREATE | 0x80 | 可在自身模式下创建任何指定类型对象(对象类型由obj_type确定) |
库级 | ACL_CRE_ANY | 0x100 | 可创建任何指定类型对象(对象类型由obj_type确定) |
库级 | ACL_ALT_ANY | 0x200 | 可修改任何指定类型对象(对象类型由obj_type确定) |
库级 | ACL_DROP_ANY | 0x400 | 可创删除何指定类型对象(对象类型由obj_type确定) |
库级 | ACL_BACKUP_ANY | 0x800 | 可备份所有对象(无对象类型) |
库级 | ACL_RESTORE_ANY | 0x1000 | 可恢复所有对象(无对象类型) |
库级 | ACL_VACUUM_ANY | 0x2000 | 可整理空余空间(无对象类型) |
库级 | ACL_REPLICATION_ANY | 0x4000 | 可做数据同步(无对象类型) |
库级 | ACL_REFRESH_ANY | 0x8000 | 可刷新数据(无对象类型) |
库级 | ACL_GRANT_ANY | 0x10000 | 可授权(无对象类型) |
库级 | ACL_ENCRYPT_ANY | 0x20000 | 可加密任何表(无对象类型) |
库级 | ACL_CRE_JOB | 0x40000 | 可创建定时任务(无对象类型) |
库级 | ACL_TRACE | 0x80000 | 可调试任何连接 |
库级 | ACL_AUDITOR | 0x10000000 | 审计设置权(无对象类型) |
库级 | ACL_AUDIT_ADMIN | 0x30000000 | 审计管理权(无对象类型) |
库级 | ACL_SSO | 0x40000000 | 安全标记权(无对象类型) |
库级 | ACL_SS_ADMIN | 0xc0000000 | 安全管理权(无对象类型) |
库级 | ACL_DBA | 0x7fffff | 所有库级权(无对象类型) |
库级 | ACL_DBO | 0xffffff | DBO权(与DBA相比,多一个对DBA权限用户的收授权) |
应用举例
- 查询权限授予信息
sql
SQL> CREATE TABLE tab_permission(id INT);
SQL> CREATE USER usr IDENTIFIED BY 'test_123@';
SQL> GRANT INSERT ON tab_permission TO usr;
SQL> GRANT UPDATE ON tab_permission TO usr;
SQL> GRANT DELETE ON tab_permission TO usr;
SQL> SELECT object_id,object_type,authority,regrant,org_grantor_id FROM SYS_ACLS t1 JOIN SYS_TABLES t2 ON t1.db_id=t2.db_id AND t1.object_id=t2.table_id WHERE t2.table_name='tab_permission';
+-----------+-------------+-----------+---------+----------------+
| OBJECT_ID | OBJECT_TYPE | AUTHORITY | REGRANT | ORG_GRANTOR_ID |
+-----------+-------------+-----------+---------+----------------+
| 1048576 | 5 | 14 | 0 | 1 |
+-----------+-------------+-----------+---------+----------------+
提示
AUTHORITY字段为所有权限的和。示例中INSERT权限:2, UPDATE:4, DELETE:8,三种权限之和为14。
详细解释可参考权限管理
- 权限值相同时举例(针对权限值为0x1a0的三种情况)
sql
SQL> CREATE USER usr_acl IDENTIFIED BY 'test_123@';
-- 创建存储过程
SQL> CREATE PROCEDURE proc_acl(c1 int) AS
BEGIN
SEND_MSG('a');
END;
-- 为用户usr_acl赋予存储过程proc_acl的所有权限
SQL> GRANT ALL PRIVILEGES ON PROCEDURE proc_acl TO usr_acl;
SQL> SELECT t1.grantor_id, t1.grantee_id, t1.object_id, t1.object_type, t1.authority, t2.obj_name FROM SYS_ACLS t1 JOIN SYS_OBJECTS t2 ON t1.db_id=t2.db_id AND t1.object_id=t2.obj_id WHERE t2.obj_name='proc_acl';
+------------+------------+-----------+-------------+-----------+----------+
| GRANTOR_ID | GRANTEE_ID | OBJECT_ID | OBJECT_TYPE | AUTHORITY | OBJ_NAME |
+------------+------------+-----------+-------------+-----------+----------+
| 1 | 101 | 1048578 | 7 | 416 | PROC_ACL |
+------------+------------+-----------+-------------+-----------+----------+
-- 为用户usr_acl赋予系统包DBMS_DBA的所有权限
SQL> GRANT ALL PRIVILEGES ON DBMS_DBA TO usr_acl;
SQL> SELECT t1.grantor_id, t1.grantee_id, t1.object_id, t1.object_type, t1.authority, t2.obj_name FROM SYS_ACLS t1 JOIN SYS_OBJECTS t2 ON t1.db_id=t2.db_id AND t1.object_id=t2.obj_id WHERE t2.obj_name='DBMS_DBA';
+------------+------------+-----------+-------------+-----------+----------+
| GRANTOR_ID | GRANTEE_ID | OBJECT_ID | OBJECT_TYPE | AUTHORITY | OBJ_NAME |
+------------+------------+-----------+-------------+-----------+----------+
| 1 | 101 | 8192 | 18 | 416 | DBMS_DBA |
+------------+------------+-----------+-------------+-----------+----------+
SQL> CREATE TYPE udt_acl AS OBJECT(a INT, b FLOAT);
-- 为用户usr_acl赋予自定义类型udt_acl的所有权限
SQL> GRANT ALL PRIVILEGES ON udt_acl TO usr_acl;
SQL> SELECT t1.grantor_id, t1.grantee_id, t1.object_id, t1.object_type, t1.authority, t2.obj_name FROM SYS_ACLS t1 JOIN SYS_OBJECTS t2 ON t1.db_id=t2.db_id AND t1.object_id=t2.obj_id WHERE t2.obj_name='udt_acl';
+------------+------------+-----------+-------------+-----------+----------+
| GRANTOR_ID | GRANTEE_ID | OBJECT_ID | OBJECT_TYPE | AUTHORITY | OBJ_NAME |
+------------+------------+-----------+-------------+-----------+----------+
| 1 | 101 | 1048579 | 19 | 416 | UDT_ACL |
+------------+------------+-----------+-------------+-----------+----------+
SQL> SELECT t1.grantor_id, t1.grantee_id, t1.object_id, t1.object_type, t1.authority, t2.obj_name FROM SYS_ACLS t1 JOIN SYS_OBJECTS t2 ON t1.db_id=t2.db_id AND t1.object_id=t2.obj_id WHERE t1.AUTHORITY = 416;
+------------+------------+-----------+-------------+-----------+----------+
| GRANTOR_ID | GRANTEE_ID | OBJECT_ID | OBJECT_TYPE | AUTHORITY | OBJ_NAME |
+------------+------------+-----------+-------------+-----------+----------+
| 1 | 101 | 8192 | 18 | 416 | DBMS_DBA |
| 1 | 101 | 1048578 | 7 | 416 | PROC_ACL |
| 1 | 101 | 1048579 | 19 | 416 | UDT_ACL |
+------------+------------+-----------+-------------+-----------+----------+
提示
十进制416对应十六进制0x1a0;
对象级权限不单一看AUTHORITY,而是由OBJECT_ID, OBJECT_TYPE和AUTHORITY组合共同标识权限。