HAS_SCHEMA_PRIVILEGE

说明

判断指定用户在指定模式上是否具有指定权限,不指定用户则查询当前用户的权限。

语法

has_schema_privilege ::=

参数

schema_name

NAME类型,被查询模式的名称。

schema_oid

OID类型,被查询模式的ID。

user_name

NAME类型,被查询用户的用户名。

user_id

INT4类型,被查询用户的用户ID。

priv_type

TEXT类型,希望查询的权限类型,模式上拥有的具体权限类型详情请见 GRANT 的对象权限列表。

返回值

BOOL 表示是否有权限

示例

-- 准备环境
CONNECT SYSDBA/szoscar55;
DROP FUNCTION FUNC1;
DROP USER U1;
DROP SCHEMa S1;

CREATE SCHEMa S1;
CREATE USER U1 PASSWORD 'szoscar55';

-- 授权
GRANT CREATE ON SCHEMa S1 TO U1;


-- 使用用户名、模式名和权限类型查询
SELECT HAS_SCHEMA_PRIVILEGE('U1', 'S1', 'CREATE');
HAS_SCHEMA_PRIVILEGE(boolean)      |
-----------------------------------
false                              |
总数目:1

-- 使用用户ID、模式名和权限类型查询
SELECT HAS_SCHEMA_PRIVILEGE(usesysid, 'S1', 'CREATE') FROM v_sys_user WHERE usename = 'U1';
HAS_SCHEMA_PRIVILEGE(boolean)      |
-----------------------------------
false                              |
总数目:1

-- 使用用户名、模式ID和权限类型查询
SELECT HAS_SCHEMA_PRIVILEGE('U1', oid, 'CREATE') FROM sys_namespace WHERE nspname = 'S1';
HAS_SCHEMA_PRIVILEGE(boolean)      |
-----------------------------------
false                              |
总数目:1
-- 使用用户ID、模式ID和权限类型查询
CREATE OR REPLACE FUNCTION FUNC1(user_name TEXT, schema_name TEXT, priv_name TEXT) RETURN BOOL AS
DECLARE 
	schema_id INT;
	user_id  INT;
BEGIN      
	SELECT oid INTO schema_id FROM sys_namespace WHERE nspname = schema_name;
	SELECT usesysid INTO user_id FROM v_sys_user WHERE usename = user_name;

	RETURN HAS_SCHEMA_PRIVILEGE(user_id,  schema_id,  priv_name);	  
END;

/
SELECT FUNC1('U1', 'S1', 'CREATE');
FUNC1(boolean)      |
--------------------
false               |
总数目:1

-- 使用模式名和权限类型查询
SELECT HAS_SCHEMA_PRIVILEGE('S1', 'CREATE');
HAS_SCHEMA_PRIVILEGE(boolean)      |
-----------------------------------
true                               |
总数目:1

-- 使用模式ID和权限类型查询
SELECT HAS_SCHEMA_PRIVILEGE(oid, 'CREATE') FROM sys_namespace WHERE nspname = 'S1';
HAS_SCHEMA_PRIVILEGE(boolean)      |
-----------------------------------
true                               |
总数目:1

DROP SCHEMa S1;
DROP USER U1;
DROP FUNCTION FUNC1;