데이터베이스 내에서 현재 사용자가 접근 권한을 가진 클래스에 대한 정보를 보여준다.
속성명 |
데이터 타입 |
설명 |
---|---|---|
class_name |
VARCHAR (255) |
클래스명 |
owner_name |
VARCHAR (255) |
클래스 소유자명 |
class_type |
VARCHAR (6) |
클래스이면 ‘CLASS’, 가상 클래스이면 ‘VCLASS’ |
is_system_class |
VARCHAR (3) |
시스템 클래스이면 ‘YES’, 아니면 ‘NO’ |
partitioned |
VARCHAR (3) |
분할 그룹 클래스이면 ‘YES’, 아니면 ‘NO’ |
CREATE VCLASS db_class (class_name, owner_name, class_type, is_system_class, partitioned)
AS
SELECT c.class_name, CAST(c.owner.name AS VARCHAR(255)),
CASE WHEN c.class_type = 0 THEN 'CLASS' WHEN 1 THEN 'VCLASS' WHEN 2 THEN 'PROXY' ELSE 'UNKNOW' END,
CASE WHEN MOD(c.is_system_class, 2) = 1 THEN 'YES' ELSE 'NO' END,
CASE WHEN c.sub_classes IS NULL THEN 'NO' ELSE NVL((SELECT 'YES' FROM _db_partition p WHERE p.class_of = c and p.pname IS NULL), 'NO') END
FROM _db_class c
WHERE (CURRENT_USER = 'DBA' OR
{c.owner.name} subseteq (
SELECT set{CURRENT_USER} + coalesce(sum(set{t.g.name}), set{})
from db_user u, table(groups) as t(g)
where u.name = CURRENT_USER ) OR
{c} subseteq (
SELECT sum(set{au.class_of})
FROM _db_auth au
WHERE {au.grantee.name} subseteq (
SELECT set{CURRENT_USER} + coalesce(sum(set{t.g.name}), set{})
from db_user u, table(groups) as t(g)
where u.name = CURRENT_USER ) AND
au.auth_type = 'SELECT'));
다음 예제에서는 현재 사용자가 소유하고 있는 클래스를 검색한다.
csql> select class_name
csql> from db_class
csql> where owner_name = CURRENT_USER;
csql> ;xrun
=== <Result of SELECT Command in Line 1> ===
class_name
======================
'stadium'
'code'
'nation'
'event'
'athlete'
'participant'
'olympic'
'game'
'record'
'history'
'female_event'
참고 시스템 카탈로그 가상 클래스에 대한 모든 예제는 csql 프로그램에서 작성되었는데, 위의 예제는 사용자 옵션을 생략하였으며(생략시 기본 사용자는 PUBLIC), 그 외 별도의 언급이 없는 경우 --no-auto-commit (auto-commit 모드 비활성화), -u (사용자 dba를 명시) 옵션을 사용하였다.
% csql --no-auto-commit -u dba demodb
다음 예제에서는 현재 사용자가 접근할 수 있는 가상 클래스를 검색한다.
csql> select class_name
csql> from db_class
csql> where class_type = 'VCLASS';
csql> ;xrun
=== <Result of SELECT Command in Line 1> ===
class_name
======================
'db_stored_procedure_args'
'db_stored_procedure'
'db_partition'
'db_trig'
'db_auth'
'db_index_key'
'db_index'
'db_meth_file'
'db_meth_arg_setdomain_elm'
'db_meth_arg'
'db_method'
'db_attr_setdomain_elm'
'db_attribute'
'db_vclass'
'db_direct_super_class'
'db_class'
다음 예제에서는 현재 사용자가 접근할 수 있는 시스템 클래스를 검색한다. (사용자는 PUBLIC)
csql> select class_name
csql> from db_class
csql> where is_system_class = 'YES' and
csql> class_type = 'CLASS'
csql> order by 1;
csql> ;xrun
=== <Result of SELECT Command in Line 1> ===
class_name
======================
'db_authorization'
'db_authorizations'
'db_root'
'db_serial'
'db_user'
'glo'