Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.4.3 |  CUBRID 9.0.0 | 

사용자 권한 관리 메서드

설명

데이터베이스 관리자(DBA)는 데이터베이스 사용자에 대한 정보를 저장하는 db_user 또는 시스템 권한 클래스인 db_authorizations에 정의된 권한 관련 메서드들을 호출하여 사용자 권한을 조회 및 수정할 수 있다. 호출하고자 하는 메서드에 따라 db_user 또는 db_authorizations 클래스를 명시할 수 있으며, 메서드의 리턴 값을 변수에 저장할 수 있다. 또한, 일부 메서드는 DBADBA 그룹의 멤버에 의해서만 호출될 수 있음을 유의한다.

참고 HA 환경에서 마스터 노드에서의 메서드 호출은 슬레이브 노드에 반영되지 않으므로 이에 주의한다.

구문

CALL method_definition ON CLASS auth_class [ TO variable ] [ ; ]

CALL method_definition ON variable [ ; ]

login( ) 메서드

login( ) 메서드는 db_user 클래스의 클래스 메서드로서, 현재 데이터베이스에 접속한 사용자를 변경하고자 할 때 사용된다. 새로 접속할 사용자 이름과 비밀번호가 인자로 주어지며, 문자열 타입이어야 한다. 비밀번호가 없는 경우 인자에 공백 문자('')을 입력할 수 있다. DBADBA 그룹의 멤버는 비밀번호를 입력하지 않고 login( ) 메서드를 호출할 수 있다.

-- 비밀번호가 없는 DBA 사용자로 접속하기

CALL login ('dba', '') ON CLASS db_user;

-- 비밀번호가 cubrid인 user_1 사용자로 접속하기

CALL login ('user_1', 'cubrid') ON CLASS db_user;

add_user( ) 메서드

add_user( ) 메서드는 db_user 클래스의 클래스 메서드로서, 새로운 사용자를 추가할 때 사용된다. 새로 추가할 사용자 이름과 비밀번호가 인자로 주어지며, 문자열 타입이어야 한다. 이때, 추가할 사용자 이름은 이미 등록된 데이터베이스 사용자 이름과 중복되어서는 안 된다. 한편, add_user( ) 메서드는 DBA 사용자와 DBA 그룹에 속한 멤버만 호출할 수 있다.

-- 비밀번호가 없는 user_2 추가하기

CALL add_user ('user_2', '') ON CLASS db_user;

-- 비밀번호가 없는 user_3 추가하고, 메서드 리턴 값을 admin 변수에 저장하기

CALL add_user ('user_3', '') ON CLASS db_user to admin;

drop_user( ) 메서드

drop_user( ) 메서드는 db_user 클래스의 클래스 메서드로서, 기존 사용자를 삭제할 때 사용된다. 삭제하고자 하는 사용자 이름만 인자로 주어지며, 문자열 타입이어야 한다. 이때, 클래스의 소유자는 삭제할 수 없으므로, DBA는 관련 클래스의 소유자를 변경한 후, 해당 사용자를 삭제할 수 있다. drop_ user( ) 메서드 역시 DBA 사용자와 DBA 그룹에 속한 멤버만 호출할 수 있다.

-- user_2 삭제하기

CALL drop_user ('user_2') ON CLASS db_user;

find_user( ) 메서드

find_user( ) 메서드는 db_user 클래스의 클래스 메서드로서, 인자로 주어진 사용자를 검색할 때 사용된다. 찾고자 하는 사용자 이름이 인자로 주어지며, TO 뒤에 지정된 변수에 메서드의 리턴 값을 저장하여 다음 질의 수행 시 변수에 저장된 값을 이용할 수 있다.

-- user_2를 찾아서 admin이라는 변수에 저장하기

CALL find_user ('user_2') ON CLASS db_user TO admin;

set_password( ) 메서드

set_password( ) 메서드는 사용자 인스턴스 각각에 대해 호출할 수 있는 인스턴스 메서드로서, 사용자의 비밀번호를 변경할 때 사용된다. 지정된 사용자의 새로운 비밀번호가 인자로 주어진다. DBADBA 그룹의 멤버를 제외한 일반 사용자는 자신의 비밀번호만 변경할 수 있다.

-- user_4 를 추가하고 user_common 변수에 저장하기

CALL add_user ('user_4', '') ON CLASS db_user to user_common;

-- user_4의 비밀번호를 'abcdef'로 변경하기

CALL set_password('abcdef') on user_common;

change_owner( ) 메서드

change_owner( ) 메서드는 db_authorizations 클래스의 클래스 메서드로서, 클래스 소유자를 변경할 때 사용된다. 소유자를 변경하고자 하는 클래스 이름과 새로운 소유자의 이름이 각각 인자로 주어진다. 이때, 데이터베이스에 존재하는 클래스와 소유자가 인자로 지정되어야 하며, 그렇지 않은 경우 에러가 발생한다. change_owner( ) 메서드는 DBADBA 그룹의 멤버만 호출할 수 있다. 이 메서드와 같은 역할을 하는 질의로 ALTER … OWNER가 있다. 이에 대한 내용은 소유자 변경을 참고한다.

-- table_1의 소유자를 user_4로 변경하기

CALL change_owner ('table_1', 'user_4') ON CLASS db_authorizations;

예제

다음 예제는 특정 데이터베이스 사용자의 존재 여부를 판단하기 위해 시스템 클래스인 db_user에 등록된 메서드인 find_user를 호출하는 CALL 문의 수행을 보여준다. 첫 번째 문장은 db_user 클래스에 정의된 클래스 메서드를 호출한다. 찾고자 하는 대상 사용자가 데이터베이스에 등록되어 있을 경우 x에는 해당 클래스 이름(여기에서는 db_user)이 저장되고, 없을 경우엔 NULL이 저장된다.

두 번째 문장은 변수 x에 저장된 값을 출력하는 방법이다. 이 질의문에서 DB_ROOT는 시스템 클래스로서, 하나의 인스턴스만이 존재하여 sys_date나 등록된 변수의 값을 출력하는 데 사용할 수 있다. 이러한 용도로 쓰일 경우 DB_ROOT는 인스턴스가 하나인 다른 테이블로 대체할 수 있다.

CALL find_user('dba') ON CLASS db_user to x;

Result

======================

db_user

 

SELECT x FROM db_root;

x

======================

db_user

find_user를 이용하면 결과값이 NULL인지 아닌지에 따라 해당 사용자가 데이터베이스에 존재하는지 여부를 판단할 수 있다.