HAS_ANY_TABLE_PRIVILEGE

说明

判断用户在指定表上是否具有权限。

语法

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;