我如何编写将一次更新多个表的授权访问的 PLSQL 查询 |SQL Developer|
Posted
技术标签:
【中文标题】我如何编写将一次更新多个表的授权访问的 PLSQL 查询 |SQL Developer|【英文标题】:How do i write PLSQL Query that will update the grant access for multiple tables at once |SQL Developer| 【发布时间】:2019-08-16 09:28:58 【问题描述】:我有一个场景,我需要编写一个 PLSQL 查询来一次为特定用户授予对多个表的权限,例如:User_A
tbl_1
tbl_2
tbl_3
tbl_4
tbl_5
tbl_6
tbl_7
tbl_8
上表仅作为读取访问。现在我想提供写权限,删除权限
我如何实现这个场景?
【问题讨论】:
【参考方案1】:您可以将此类游标与execute immediate
命令一起使用,为您当前架构的所有表(User_A
以外的架构)授予User_A
所需的权限:
SQL> set serveroutput on
SQL> begin
for c in
(select 'grant insert, update, delete on '||t.table_name||' to User_A' as cmd
from user_tables t
order by t.table_name)
loop
dbms_output.put_line(c.cmd);
execute immediate c.cmd;
end loop;
end;
【讨论】:
一般来说,在立即执行之前最好有 DBMS_OUTPUT。因此,如果出现错误,我们知道哪个语句失败而不是最后一个成功 真的值得写,然后验证一个 10 语句的代码块,以避免写 8 个授权语句。此外,上面将授予每个表的权限。您需要为表和可能的用户传递多个值参数,然后将它们解析为单个值以生成适当的授权语句。如果您预计经常这样做,可能值得一试。【参考方案2】:要真正回答您的问题并一次运行多个授权,您需要使用CREATE SCHEMA
命令。
语法有点棘手,因为您必须硬编码运行语句的用户名。如果其中一项赠款失败,它们都会失败,这可能是好事,也可能不是好事。但与 PL/SQL 脚本或多个 SQL 语句相比,这种方法使用的代码更少,速度也更快。
create schema authorization USER_RUNNING_THE_QUERY
grant select, insert, update, delete on tbl_1 to test_user1
grant select, insert, update, delete on tbl_2 to test_user1
grant select, insert, update, delete on tbl_3 to test_user1
grant select, insert, update, delete on tbl_4 to test_user1
grant select, insert, update, delete on tbl_5 to test_user1
grant select, insert, update, delete on tbl_6 to test_user1
grant select, insert, update, delete on tbl_7 to test_user1
grant select, insert, update, delete on tbl_8 to test_user1;
【讨论】:
以上是关于我如何编写将一次更新多个表的授权访问的 PLSQL 查询 |SQL Developer|的主要内容,如果未能解决你的问题,请参考以下文章
oracle的grant语句,一次只能授权一张表的访问权限吗?
oracle的grant语句,一次只能授权一张表的访问权限吗?
如果 Column_X 更新,PLSQL 触发器记录对审计表的更新