HAS_TABLE_PRIVILEGE¶
说明¶
判断指定用户在指定表上是否具有指定权限,不指定用户则查询当前用户的权限。
参数¶
table_name
TEXT类型,被查询表权限的表名。
table_oid
OID类型,被查询表权限的表ID。
user_name
NAME类型,被查询用户的用户名。
user_id
INT4类型,被查询用户的用户ID。
priv_type
TEXT类型,希望查询的权限类型,表上拥有的具体权限类型详情请见 GRANT 的对象权限列表。
返回值¶
BOOL 表示是否有权限
示例¶
-- 准备环境
CONNECT SYSDBA/szoscar55;
DROP TABLE T1;
DROP USER U1;
DROP FUNCTION FUNC1;
CREATE TABLE T1(a INT);
CREATE USER U1 PASSWORD 'szoscar55';
-- 授权
GRANT SELECT ON T1 TO U1;
-- 使用用户名、表名和权限类型查询
SELECT HAS_TABLE_PRIVILEGE('U1', 'T1', 'SELECT');
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
true |
总数目:1
SELECT HAS_TABLE_PRIVILEGE('U1', 'T1', 'INSERT');
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
false |
总数目:1
-- 使用用户ID、表名和权限类型查询
SELECT HAS_TABLE_PRIVILEGE(usesysid, 'T1', 'SELECT') FROM v_sys_user WHERE usename = 'U1';
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
true |
总数目:1
SELECT HAS_TABLE_PRIVILEGE(usesysid, 'T1', 'INSERT') FROM v_sys_user WHERE usename = 'U1';
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
false |
总数目:1
-- 使用用户名、表ID和权限类型查询
SELECT HAS_TABLE_PRIVILEGE('U1', oid, 'SELECT') FROM sys_class WHERE relname = 'T1';
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
true |
总数目:1
SELECT HAS_TABLE_PRIVILEGE('U1', oid, 'INSERT') FROM sys_class WHERE relname = 'T1';
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
false |
总数目:1
-- 使用用户ID、表ID和权限类型查询
CREATE OR REPLACE FUNCTION FUNC1(user_name TEXT, table_name TEXT, priv_name TEXT) 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_TABLE_PRIVILEGE(user_id, table_id, priv_name);
END;
/
SELECT FUNC1('U1', 'T1', 'SELECT');
FUNC1(boolean) |
--------------------
true |
总数目:1
SELECT FUNC1('U1', 'T1', 'INSERT');
FUNC1(boolean) |
--------------------
false |
总数目:1
-- 使用表名和权限类型查询
SELECT HAS_TABLE_PRIVILEGE('T1', 'SELECT');
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
true |
总数目:1
SELECT HAS_TABLE_PRIVILEGE('T1', 'INSERT');
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
true |
总数目:1
-- 使用表名和权限类型查询
SELECT HAS_TABLE_PRIVILEGE(oid, 'SELECT') FROM sys_class WHERE relname = 'T1';
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
true |
总数目:1
SELECT HAS_TABLE_PRIVILEGE(oid, 'INSERT') FROM sys_class WHERE relname = 'T1';
HAS_TABLE_PRIVILEGE(boolean) |
----------------------------------
true |
总数目:1
DROP TABLE T1;
DROP USER U1;
DROP FUNCTION FUNC1;