DBMS 2

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

권한과 특권

DBMS 2
DB2 가이드
DB2 사용자 가이드
권한과 특권
작성자
admin
작성일
2021-02-19 14:48
조회
2275

권한과 특권

사용자 인증

①모든 응용프로그램은 데이터베이스에 접속할 때, connect 문을 이용하여 사용자 ID와 암호명 을 명시하게 됩니다. 명시한 사용자 ID와 암호명이 유효하지 않으면, 데이터베이스에 대한 접속 은 허용되지 않습니다.


$ db2 connect to 데이터베이스명> user 사용자명> using 암호명>

②connect 문에서 사용자 ID와 암호를 명시하지 않으면, 현재 세션의 로그인 사용자와 암호명 이 사용됩니다.


$ db2 connect to 데이터베이스명>

③connect 문에서 제공된 사용자 ID와 암호를 이용하여 OS의 사용자 관리 기능을 요청합니다. 사용자 인증의 방식은 인스턴스 구성 변수인 AUTHENTICATION에 의해 결정되며, 대표적인 인증 방식은 다음과 같습니다.

db2

db2


SERVER 인증 유형

①서버의 인스턴스 구성 변수 AUTHENTICATION을 SERVER로 설정합니다.


$ db2 get dbm cfg | grep AUTHENTICATION
데이터베이스 관리 프로그램 인증 (AUTHENTICATION) = SERVER

②클라이언트에서 catalog db 명령어를 이용하여 원격 데이터베이스를 등록합니다.


C:\> db2 catalog db 원격데이터베이스명> as 데이터베이스별명> at node
원격노드명>
C:\> list database directory | find “인증”
인증 = SERVER

③클라이언트에서 connect 문을 이용하여 데이터베이스 서버에 접속을 요청하면, 제공된 사용 자ID와 암호가 서버로 전송되어 서버의 OS에 의해 점검됩니다. 서버의 OS에 사용자 ID가 존 재하고, 암호명이 일치하면 사용자 인증은 성공하여 데이터베이스에 재한 접속이 허용됩니다.


C:\> db2 connect to 데이터베이스별명> user 서버의 사용자 ID> using 서버 의 암호명>

④서버에 제공된 사용자 ID가 존재하지 않거나, 암호명이 일치하지 않으면 사용자 인증은 실패하 고 데이터베이스에 대한 접속은 허용되지 않습니다.


C:>db2 connect to sample01 user kr001325 using xx
SQL30082N 보안 이유 "24"("USERNAME AND/OR PASSWORD
INVALID")(으)로 인해 연결
시도에 실패했습니다. SQLSTATE=08001

db2


CLIENT 인증 유형

①서버의 인스턴스 구성 변수 AUTHENTICATION의 값을 CLIENT로 설정합니다.


$ db2 update dbm cfg using AUTHENTICATION CLIENT
$ db2stop force
$ db2start

②클라이언트에서 catalog db 명령어를 이용하여 원격 데이터베이스를 등록합니다.


C:\> db2 catalog db 원격데이터베이스명> as 데이터베이스별명> at node
원격노드명>
C:\> list database directory | find “인증”
인증 = CLIENT

③connect 문에서 제공된 사용자ID와 암호는 클라이언트의 OS에 의해 점검됩니다. 클라이언 트의 OS에 사용자 ID가 존재하고, 암호명이 일치하면 사용자 인증은 성공하여 데이터베이스에 대한 접속이 허용됩니다. 사용자 ID만 서버로 전송됩니다.


C:\> db2 connect to 데이터베이스별명> user 클라이언트의 사용자 ID> using
클라이언트의 암호명>

④제공된 사용자 ID가 클라이언트에 존재하지 않거나, 암호명이 일치하지 않으면 사용자 인증은 실패하고 데이터베이스에 대한 접속은 허용되지 않습니다.


C:> db2 connect to 데이터베이스별명> user 클라이언트의 사용자 ID> using
잘못된 클라이언트의 암호명>
SQL30082N 보안 이유 "24"("USERNAME AND/OR PASSWORD
INVALID")(으)로 인해 연결시도에 실패했습니다. SQLSTATE=08001

db2


권한

①인스턴스 권한과 데이터베이스 권한의 체계는 다음과 같이 분류됩니다.

db2

②인스턴스 권한은 4가지로 구분됩니다. 인스턴스 구성 변수를 이용하여 OS에 정의된 특정한 그 룹 단위로 제어합니다.

db2

③데이터베이스 권한은 다음과 같습니다. grant 문과 revoke문을 이용하여 사용자 또는 그룹 단위로 제어할 수 있습니다.

db2


권한별 기능

①권한별로 실행 가능한 명령어는 다음과 같습니다.

db2

②SYSMON 권한을 사용하여 사용자는 다음과 같은 명령어를 사용할 수 있습니다

db2

③LOAD 권한을 사용하여 사용자는 다음과 같은 명령어를 사용할 수 있습니다

db2


인스턴스 권한 제어 방법

①SYSADM 권한을 가진 사용자로 로그인합니다.


$ login 인스턴스 사용자>

②update dbm cfg 명령어를 이용하여 인스턴스 구성 변수인 SYSADM_GROUP, SYSCTRL_GROUP, SYSMAINT_GROUP, SYSMON_GROUP의 값을 OS에 정의된 그룹명>으로 지정합니다. 지정한 그룹에 속한 사용자는 간접적으로 권한을 부여 받습니다.


$ db2 update dbm cfg using SYSCTRL_GROUP 그룹명>

③update dbm cfg 명령어를 이용하여 인스턴스 구성 변수인 SYSADM_GROUP, SYSCTRL_GROUP, SYSMAINT_GROUP, SYSMON_GROUP의 값을 NULL로 지정 하면 기본값으로 복귀하므로, 해당 그룹은 더 이상 인스턴스 권한을 가질 수 없습니다.


$ db2 update dbm cfg using SYSCTRL_GROUP NULL

④각 구성 변수의 변경은 인스턴스를 재시작해야 반영됩니다.


$ db2stop force
$ db2start

⑤get dbm cfg 명령어를 이용하여 인스턴스 권한과 관련된 구성 변수의 값을 확인합니다.


$ db2 get dbm cfg | grep "_GROUP"
SYSADM 그룹 이름 (SYSADM_GROUP) = ADMGRP
SYSCTRL 그룹 이름 (SYSCTRL_GROUP) = CTRLGRP
SYSMAINT 그룹 이름 (SYSMAINT_GROUP) = MAINTGRP
SYSMON 그룹 이름 (SYSMON_GROUP) = MOMGRP
데이터베이스 권한 제어 방법

①SYSADM 권한을 가진 사용자로 데이터베이스에 접속합니다.


$ login 인스턴스 사용자> $ db2 connect to 데이터베이스명>

②grant문으로 DBADM과 LOAD 권한을 사용자에게 부여합니다.


$ db2 GRANT DBADM ON DATABASE TO USER 사용자명> $ db2 GRANT LOAD ON DATABASE TO USER 사용자명>

③grant문으로 DBADM과 LOAD 권한을 그룹에 부여하면, 그룹에 속한 사용자는 간접적으로 권한을 부여 받습니다.


$ db2 GRANT DBADM ON DATABASE TO GROUP 그룹명> $ db2 GRANT LOAD ON DATABASE TO GROUP 그룹명>

④revoke 문으로 DBADM과 LOAD 권한을 제거할 수 있습니다.


$ db2 REVOKE DBADM ON DATABASE FROM USER 사용자명> $ db2 REVOKE LOAD ON DATABASE FROM USER 사용자명> 
$ db2 REVOKE DBADM ON DATABASE FROM GROUP 그룹명> $ db2 REVOKE LOAD ON DATABASE FROM GROUP 그룹명>

⑤DBADM과 LOAD 권한은 SYSCAT.DBAUTH 뷰를 통해 확인합니다.


$ db2 "select grantee, DBADM, LOAD from syscat.dbauth"
특권

①데이터베이스 오브젝트별 특권의 체계는 다음과 같이 분류됩니다.

db2

②오브젝트별로 구체적인 특권명은 다음과 같으며, grant 문과 revoke문을 이용하여 사용자 또 는 그룹 단위로 제어할 수 있습니다.

db2


특권 제어 방법

①특권은 grant 문과 revoke 문으로 제어합니다.

db2

②grant 문으로 OS에 정의된 그룹 또는 사용자에게 특권을 부여합니다.


$ db2 grant 특권명> on 오브젝트명> to group 그룹명>
$ db2 grant 특권명> on 오브젝트명> to user 사용자명>

③한 가지 이상의 특권을 한 개의 grant 문으로 부여할 수 있습니다.


$ db2 grant 특권명1>, 특권명2> on 오브젝트명> to user 사용자명>

④모든 사용자에게 권한을 부여하려면 PUBLIC이라는 키워드를 이용합니다.


$ db2 grant 특권명> on 오브젝트명> to public

⑤WITH GRANT OPTION을 사용하면, 권한을 부여받은 사용자는 다른 사용자에게 부여받은 권한을 전달할 수 있습니다.


$ db2 grant 특권명> on 오브젝트명> to user 사용자명> with grant
option

⑥revoke 문으로 OS 그룹 또는 사용자에게 특권을 제거합니다.


$ db2 revoke 특권명> on 오브젝트명> from user 사용자명>
데이터베이스 특권

①데이터베이스에 관한 특권은 다음과 같습니다.

db2

②특권명>을 지정하여 그룹이나 사용자별로 제어합니다.

db2

③grant 문과 revoke 문으로 그룹 또는 사용자에게 부여합니다.


$ db2 grant CONNECT on database to GROUP 그룹명>
$ db2 grant CONNECT on database to USER 사용자명>
$ db2 grant CONNECT on database to PUBLIC

④데이터베이스에 관한 특권은 카탈로그 뷰인 SYSCAT.DBAUTH 를 이용하여 확인합니다.


$ db2 “select * from SYSCAT.DBAUTH”
테이블스페이스 특권

①테이블스페이스에 관한 특권은 다음과 같습니다.

db2

②특권명>과 테이블스페이스명>을 지정하여 그룹이나 사용자별로 제어합니다.

db2

③grant 문과 revoke 문으로 그룹 또는 사용자에게 부여합니다.


$ db2 grant USE OF TABLESPACE 테이블스페이스명> to GROUP 그룹명>
$ db2 grant USE OF TABLESPACE 테이블스페이스명> to USER 사용자명>
$ db2 grant USE OF TABLESPACE 테이블스페이스명> to PUBLIC
$ db2 grant USE OF TABLESPACE 테이블스페이스명> to USER 사용자명> WITH GRANT OPTION

④테이블스페이스에 관한 특권은 SYSCAT.TBSPACEAUTH 뷰를 이용하여 확인합니다.


테이블스페이스에 관한 특권은 SYSCAT.TBSPACEAUTH 뷰를 이용하여 확인합니다.


$ db2 “select * from SYSCAT.TBSPACEAUTH ”
스키마 특권

①스키마에 관한 특권은 다음과 같습니다.

db2

②특권명>과 스키마명>을 지정하여 그룹이나 사용자별로 제어합니다.

db2

③grant 문과 revoke 문으로 그룹 또는 사용자에게 부여합니다.


$ db2 grant ALTERIN on schema 스키마명> to GROUP 그룹명> $ db2 grant DROPIN on schema 스키마명> to USER 사용자명> 
$ db2 grant CREATEIN on schema 스키마명> to PUBLIC $ db2 grant DROPIN on schema 스키마명> to USER 사용자명> WITH GRANT OPTION

④스키마에 관한 특권은 SYSCAT.SCHEMAAUTH 뷰를 이용하여 확인합니다.


$ db2 “select * from SYSCAT.SCHEMAAUTH”
테이블 특권

①테이블에 관한 특권은 다음과 같습니다.

db2

②특권명>과 테이블명>을 지정하여 그룹이나 사용자별로 제어합니다.

db2

③테이블에 관한 특권은 SYSCAT.TABAUTH 뷰를 이용하여 확인합니다.


$ db2 “select * from SYSCAT.TABAUTH”
뷰 특권

①뷰에 관한 특권은 다음과 같습니다.

db2

②테이블과 뷰는 동일한 방법으로 grant 문과 revoke 문으로 <특권명>과 <뷰명>을 지정하여 그룹이나 사용자별로 제어합니다.


$ db2 grant UPDATE on table 테이블명> to GROUP 그룹명>
$ db2 grant UPDATE (컬럼명>) on table 테이블명> to USER 사용자명>
$ db2 grant UPDATE on table 테이블명> to USER 사용자명>
$ db2 grant UPDATE on table 테이블명> to USER 사용자명> WITH
GRANT OPTION
$ db2 grant UPDATE on table 뷰명> to PUBLIC

③뷰에 관한 특권은 SYSCAT.TABAUTH 뷰를 이용하여 확인합니다.


$ db2 “select * from SYSCAT.TABAUTH”
인덱스 특권

①인덱스에 관한 특권은 다음과 같습니다.

db2

②특권명>과 인덱스명>을 지정하여 그룹이나 사용자별로 제어합니다.

db2

③grant 문과 revoke 문으로 그룹이나 사용자별로 제어합니다.


$ db2 grant CONTROL on index 인덱스명> to GROUP 그룹명> $ db2 grant CONTROL on index 인덱스명> to USER 사용자명> 
$ db2 grant CONTROL on index 인덱스명> to PUBLIC

④인덱스에 관한 특권은 SYSCAT.INDEXAUTH 뷰를 이용하여 확인합니다.


$ db2 “select * from SYSCAT.INDEXAUTH”
패키지 특권

패키지에 관한 특권은 다shing/img/dbguide/db2_operation_guide/111124_pro_thumb152.jpg" vspace="8">

특권명>과 패키지명>을 지정하여 그룹이나 사용자별로 제어합니다.

db2

grant 문과 revoke 문으로 그룹이나 사용자별로 제어합니다.


$ db2 grant EXECUTE on package 패키지명> to GROUP 그룹명>
$ db2 grant EXECUTE on package 패키지명> to USER 사용자명>
$ db2 grant EXECUTE on package 패키지명> to PUBLIC
$ db2 grant EXECUTE on package 패키지명> to USER 사용자명> WITH
GRANT OPTION

패키지에 관한 특권은 SYSCAT.PACKAGEAUTH 뷰를 이용하여 확인합니다.


$ db2 “select * from SYSCAT.PACKAGEAUTH”
루틴 특권

UDF 또는 SP 에 관한 특권은 다음과 같습니다.

db2

UDF명> 또는 SP명> 을 지정하여 그룹이나 사용자별로 제어합니다.

db2

grant 문과 revoke 문으로 그룹이나 사용자별로 제어합니다.


$ db2 grant EXECUTE on FUNCTION UDF명> to GROUP 그룹명>
$ db2 grant EXECUTE on FUNCTION UDF명> to USER 사용자명>
$ db2 grant EXECUTE on FUNCTION UDF명> to PUBLIC
$ db2 grant EXECUTE on FUNCTION 스키마명>.* to USER 사용자명>
$ db2 grant EXECUTE on FUNCTION UDF명> to USER 사용자명> WITH
GRANT OPTION
$ db2 grant EXECUTE on SPECIFIC FUNCTION UDF에 대한 SPECIFIC명>
to USER 사용자명>
$ db2 grant EXECUTE on PROCEDURE SP명> to GROUP 그룹명>
$ db2 grant EXECUTE on PROCEDURE SP명> to USER 사용자명>
$ db2 grant EXECUTE on PROCEDURE SP명> to PUBLIC
$ db2 grant EXECUTE on PROCEDURE 스키마명>.* to USER 사용자명>
$ db2 grant EXECUTE on PROCEDURE SP명> to USER 사용자명> WITH
GRANT OPTION
$ db2 grant EXECUTE on SPECIFIC PROCEDURE SP에 대한 SPECIFIC명> to USER 사용자명>

루틴에 관한 특권은 SYSCAT.ROUTINEAUTH 뷰를 이용하여 확인합니다.


$ db2 “select * from SYSCAT.ROUTINEAUTH”
시퀀스 특권

시퀀스에 관한 특권은 다음과 같습니다.

db2

특권명>과 시퀀스명> 을 지정하여 그룹이나 사용자별로 제어합니다.

db2

grant 문과 revoke 문으로 그룹이나 사용자별로 제어합니다.


$ db2 grant USAGE on sequence 시퀀스명> to GROUP 그룹명>
$ db2 grant USAGE on sequence 시퀀스명> to USER 사용자명>
$ db2 grant USAGE on sequence 시퀀스명> to PUBLIC
$ db2 grant USAGE on sequence 시퀀스명> to USER 사용자명> WITH
GRANT OPTION

시퀀스에 관한 특권은 SYSCAT.SEQUENCEAUTH 뷰를 이용하여 확인합니다.


$ db2 “select * from SYSCAT.SEQUENCEAUTH”
간접 권한과 특권

데이터베이스를 생성한 사용자는 해당 데이터베이스에 대한 DBADM 권한을 가지게 됩니다.


$ db2 create db 데이터베이스명>
$ db2 “select * from syscat.abauth”

데이터베이스를 생성하면 간접적으로 다음의 특권이 PUBLIC에게 부여됩니다.

db2

DBADM 권한을 부여받은 그룹 또는 사용자는 간접적으로 데이터베이스에 대한 모든 특권을 부여받습니다.


$ db2 connect to 데이터베이스명>
$ db2 grant DBADM on database to user 사용자명>
$ db2 “select * from syscat.abauth"| grep ?i 사용자명>

테이블, 인덱스, 패키지 등의 데이터베이스 오브젝트를 생성한 사용자는 오브젝트의 소유자로서 CONTROL 특권을 가지게 됩니다.


$ db2 connect to 데이터베이스명>
$ db2 "create table 테이블명> (컬럼명> 데이터유형명>)"
$ db2 “select * from syscat.tabauth” | grep ?i 사용자명>

패키지에 대한 EXECUTE 특권을 부여받으면, 패키지를 실행하는 동안에는 패키지에 포함된 정 적 SQL문에 대한 특권을 임시로 가지게 되므로, 해당 SQL문에 대한 명시적인 특권이 없는 사 용자도 패키지를 실행할 때는 해당 SQL문을 실행할 수 있습니다.


$ db2 connect to 데이터베이스명>
$ db2 grant execute on package 패키지명> to user 사용자명>
$ db2 “select * from syscat.packageauth” | grep ?i 사용자명>