【发布时间】:2023-04-07 11:38:01
【问题描述】:
我想知道用户是否对某个对象有权限。
我正在开发 SQL Developer。
当我手动查询表 DBA_TAB_PRIVS 时,我得到了所有需要的信息。
但是,我需要在某些触发器和函数中使用此信息。
所以,我正在编写 PL/SQL 函数,如果角色具有特权,则返回 1,否则返回 0。
CREATE OR REPLACE FUNCTION HAS_PRIVILEGE_ON_OBJECT(rolename IN VARCHAR2,
objectname IN VARCHAR2,
objectowner IN VARCHAR2,
privilegename IN VARCHAR2)
RETURN NUMBER
AS
output NUMBER;
BEGIN
SELECT count(*) INTO output
FROM dba_tab_privs
WHERE grantee = rolename
AND owner = objectowner
AND table_name = objectname
AND privilege = privilegename;
IF output > 0 THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END has_privilege_on_object;
函数没有编译并说:
ORA 942:表或视图不存在。
连接的用户可以访问视图 DBA_TAB_PRIVS,因为我可以查询它,但是在尝试使用函数自动化它时。它不起作用。
有什么想法吗?
【问题讨论】:
标签: sql oracle plsql privileges