HAS_ANY_TABLE_PRIVILEGE¶
说明¶
判断用户在指定表上是否具有权限。
参数¶
user_id
INT4类型,被查询用户的用户ID。
table_oid
OID类型,被查询表的ID。
include_col
BOOL类型,是否检查列上的权限。
own_id
INT4类型,被查询表的属主ID。
acl
_ACLITEM类型,被查询表的权限数组。
返回值¶
BOOL 表示是否有权限
示例¶
-- 准备环境
CONNECT SYSDBA/szoscar55;
DROP FUNCTION FUNC1;
DROP FUNCTION FUNC2;
DROP USER U1;
DROP TABLE T1;
CREATE TABLE T1(a INT);
CREATE USER U1 PASSWORD 'szoscar55';
-- 授权
GRANT ALL ON T1 TO U1;
-- 使用用户ID、表ID查询
CREATE OR REPLACE FUNCTION FUNC1(user_name TEXT, table_name TEXT, include_col BOOL) RETURN BOOL AS
DECLARE
table_id INT;
user_id INT;
BEGIN
SELECT oid INTO table_id FROM sys_class WHERE relname = table_name;
SELECT usesysid INTO user_id FROM v_sys_user WHERE usename = user_name;
RETURN HAS_ANY_TABLE_PRIVILEGE(user_id, table_id, include_col);
END;
/
SELECT FUNC1('U1', 'T1', FALSE);
FUNC1(boolean) |
--------------------
true |
总数目:1
-- 使用用户ID、表ID、属主ID、ACL查询
CREATE OR REPLACE FUNCTION FUNC2(user_name TEXT, table_name TEXT, include_col BOOL) RETURN BOOL AS
DECLARE
table_id INT;
user_id INT;
own_id INT;
acl _ACLITEM;
BEGIN
SELECT oid INTO table_id FROM sys_class WHERE relname = table_name;
SELECT relowner INTO own_id FROM sys_class WHERE relname = table_name;
SELECT relacl INTO acl FROM sys_class WHERE relname = table_name;
SELECT usesysid INTO user_id FROM v_sys_user WHERE usename = user_name;
RETURN HAS_ANY_TABLE_PRIVILEGE(user_id, table_id, include_col, own_id, acl);
END;
/
SELECT FUNC2('U1', 'T1', FALSE);
FUNC2(boolean) |
--------------------
true |
总数目:1
SELECT FUNC2('U1', 'T1', TRUE);
FUNC2(boolean) |
--------------------
true |
总数目:1
DROP USER U1;
DROP FUNCTION FUNC1;
DROP FUNCTION FUNC2;
DROP TABLE T1;