删除任何 TABLE 到 TEST_USER_ROLE(除了一个 table?)
DELETE ANY TABLE TO TEST_USER_ROLE (except one table?)
是否有可能撤销一个 table 对“任何 table”权限的“删除”?
我的 user_role 有 GRANT DELETE ANY TABLE TO TEST_USER_ROLE
权限。
除了一个 table。
我想保留它
我尝试使用 REVOKE DELETE on TEST_TABLE from TEST_USER_ROLE
,但出现“无法撤销您未授予的权限”错误,这是正确的。有什么建议吗?
谢谢!
分别撤销 DELETE ANY TABLE
和授予 DELETE
。补贴多吗?当然可以,但您不必手动执行 - 编写将为您创建这些语句的查询。或者,在 PL/SQL 过程中循环执行(省略 table 你不想包含的内容)。
如果您在编写此类代码时需要帮助,请说明。
这里有一个 PL/SQL 程序可以完成这项工作:
SQL> set serveroutput on
SQL>
SQL> declare
2 l_grantee varchar2(30) := 'MIKE';
3 l_str varchar2(200);
4 begin
5 for cur_r in (select table_name
6 from user_tables
7 where table_name <> 'DEPT'
8 and rownum <= 5
9 )
10 loop
11 l_str := 'grant delete on ' || cur_r.table_name || ' to ' || l_grantee;
12 dbms_output.put_line(l_str);
13 execute immediate l_str;
14 end loop;
15 end;
16 /
grant delete on DPT to MIKE
grant delete on TABLE_B to MIKE
grant delete on TABLE_A to MIKE
grant delete on EMPLOYEES to MIKE
grant delete on TABLE_NAME to MIKE
PL/SQL procedure successfully completed.
SQL>
。它有什么作用?
- 第 2 行,
l_grantee
:我将授予权限的用户
- 游标
FOR
循环:举个例子,我将省略 table dept
并且(为了缩短列表)grant delete
for only 5 tables
- 第 11 行:编写
grant
语句
- 第 12 行:显示它(这样您就有证据证明您做了什么)
- 第 13 行:授予!
如果包含更多所有者,您将使用 ALL_TABLES
甚至 DBA_TABLES
而不是 USER_TABLES
(第 6 行)并包含 OWNER
列(因为许多用户可以有一个 table 同名)。
是否有可能撤销一个 table 对“任何 table”权限的“删除”?
我的 user_role 有 GRANT DELETE ANY TABLE TO TEST_USER_ROLE
权限。
除了一个 table。
我想保留它我尝试使用 REVOKE DELETE on TEST_TABLE from TEST_USER_ROLE
,但出现“无法撤销您未授予的权限”错误,这是正确的。有什么建议吗?
谢谢!
分别撤销 DELETE ANY TABLE
和授予 DELETE
。补贴多吗?当然可以,但您不必手动执行 - 编写将为您创建这些语句的查询。或者,在 PL/SQL 过程中循环执行(省略 table 你不想包含的内容)。
如果您在编写此类代码时需要帮助,请说明。
这里有一个 PL/SQL 程序可以完成这项工作:
SQL> set serveroutput on
SQL>
SQL> declare
2 l_grantee varchar2(30) := 'MIKE';
3 l_str varchar2(200);
4 begin
5 for cur_r in (select table_name
6 from user_tables
7 where table_name <> 'DEPT'
8 and rownum <= 5
9 )
10 loop
11 l_str := 'grant delete on ' || cur_r.table_name || ' to ' || l_grantee;
12 dbms_output.put_line(l_str);
13 execute immediate l_str;
14 end loop;
15 end;
16 /
grant delete on DPT to MIKE
grant delete on TABLE_B to MIKE
grant delete on TABLE_A to MIKE
grant delete on EMPLOYEES to MIKE
grant delete on TABLE_NAME to MIKE
PL/SQL procedure successfully completed.
SQL>
。它有什么作用?
- 第 2 行,
l_grantee
:我将授予权限的用户 - 游标
FOR
循环:举个例子,我将省略 tabledept
并且(为了缩短列表)grantdelete
for only 5 tables - 第 11 行:编写
grant
语句 - 第 12 行:显示它(这样您就有证据证明您做了什么)
- 第 13 行:授予!
如果包含更多所有者,您将使用 ALL_TABLES
甚至 DBA_TABLES
而不是 USER_TABLES
(第 6 行)并包含 OWNER
列(因为许多用户可以有一个 table 同名)。