【发布时间】:2011-07-20 15:08:42
【问题描述】:
当尝试在 Oracle 11 存储过程中放置 GRANT 语句时,它报告 GRANT 是一个意外符号。 GRANT 是否需要以某些东西开头,还是 Oracle 只是不允许在 SP 内运行 GRANTS?
【问题讨论】:
标签: oracle stored-procedures grant
当尝试在 Oracle 11 存储过程中放置 GRANT 语句时,它报告 GRANT 是一个意外符号。 GRANT 是否需要以某些东西开头,还是 Oracle 只是不允许在 SP 内运行 GRANTS?
【问题讨论】:
标签: oracle stored-procedures grant
在存储过程中使用DDL(如GRANT)是个坏主意。
您必须使用动态 SQL (EXECUTE IMMEDIATE) 来执行此操作,但老实说,我不明白您为什么要在存储过程中执行此操作。
【讨论】:
1525 更多副作用,我试图将其概括为“坏主意”。
这是一个 PL/SQL 存储过程,它将当前用户拥有的所有表的对象权限(SELECT、UPDATE 等)授予另一个用户,例如- “应用用户”。
CREATE OR REPLACE PROCEDURE grant_privs
IS
CURSOR ut_cur IS SELECT table_name from user_tables;
ut_rec ut_cur%rowtype;
BEGIN
FOR ut_rec IN ut_cur
LOOP
EXECUTE IMMEDIATE 'GRANT ALL ON ' || ut_rec.table_name || ' TO appuser';
END LOOP;
END;
/
它是在为 Web 应用程序部署数据库更改后自动执行的。当前用户拥有数据库表。在部署任何数据库更改后,执行存储过程以确保“appuser”可以在所有表上运行 SQL 语句。出于安全原因,以“appuser”身份连接的 Web 应用程序只有有限的系统权限。
这既是问题的解决方案,也是解决方案的可靠用例。
【讨论】: