尝试在 Oracle 11 存储过程中放置 GRANT 语句时,它报告 GRANT 是一个意外符号。GRANT 是否需要以某些东西开头,还是 Oracle 只是不允许在 SP 内运行 GRANTS?
问问题
5273 次
2 回答
5
在存储过程中使用DDL
(like ) 是个坏主意。GRANT
您将不得不使用动态SQL
( EXECUTE IMMEDIATE
) 来执行此操作,但老实说,我不明白您为什么要在存储过程中执行此操作。
于 2011-03-22T16:05:46.383 回答
2
这是一个 PL/SQL 存储过程,它将当前用户拥有的所有表的对象权限(SELECT、UPDATE 等)授予另一个用户,例如 - “appuser”。
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 语句。出于安全原因,Web 应用程序以“appuser”的身份连接,它只有有限的系统权限。
这既是问题的解决方案,也是解决方案的可靠用例。
于 2013-01-21T17:31:37.880 回答