DBMS 2
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
①모든 응용프로그램은 데이터베이스에 접속할 때, connect 문을 이용하여 사용자 ID와 암호명 을 명시하게 됩니다. 명시한 사용자 ID와 암호명이 유효하지 않으면, 데이터베이스에 대한 접속 은 허용되지 않습니다. ②connect 문에서 사용자 ID와 암호를 명시하지 않으면, 현재 세션의 로그인 사용자와 암호명 이 사용됩니다. ③connect 문에서 제공된 사용자 ID와 암호를 이용하여 OS의 사용자 관리 기능을 요청합니다. 사용자 인증의 방식은 인스턴스 구성 변수인 AUTHENTICATION에 의해 결정되며, 대표적인 인증 방식은 다음과 같습니다. ①서버의 인스턴스 구성 변수 AUTHENTICATION을 SERVER로 설정합니다. ②클라이언트에서 catalog db 명령어를 이용하여 원격 데이터베이스를 등록합니다. ③클라이언트에서 connect 문을 이용하여 데이터베이스 서버에 접속을 요청하면, 제공된 사용 자ID와 암호가 서버로 전송되어 서버의 OS에 의해 점검됩니다. 서버의 OS에 사용자 ID가 존 재하고, 암호명이 일치하면 사용자 인증은 성공하여 데이터베이스에 재한 접속이 허용됩니다. ④서버에 제공된 사용자 ID가 존재하지 않거나, 암호명이 일치하지 않으면 사용자 인증은 실패하 고 데이터베이스에 대한 접속은 허용되지 않습니다. ①서버의 인스턴스 구성 변수 AUTHENTICATION의 값을 CLIENT로 설정합니다. ②클라이언트에서 catalog db 명령어를 이용하여 원격 데이터베이스를 등록합니다. ③connect 문에서 제공된 사용자ID와 암호는 클라이언트의 OS에 의해 점검됩니다. 클라이언 트의 OS에 사용자 ID가 존재하고, 암호명이 일치하면 사용자 인증은 성공하여 데이터베이스에 대한 접속이 허용됩니다. 사용자 ID만 서버로 전송됩니다. ④제공된 사용자 ID가 클라이언트에 존재하지 않거나, 암호명이 일치하지 않으면 사용자 인증은 실패하고 데이터베이스에 대한 접속은 허용되지 않습니다. ①인스턴스 권한과 데이터베이스 권한의 체계는 다음과 같이 분류됩니다. ②인스턴스 권한은 4가지로 구분됩니다. 인스턴스 구성 변수를 이용하여 OS에 정의된 특정한 그 룹 단위로 제어합니다. ③데이터베이스 권한은 다음과 같습니다. grant 문과 revoke문을 이용하여 사용자 또는 그룹 단위로 제어할 수 있습니다. ①권한별로 실행 가능한 명령어는 다음과 같습니다. ②SYSMON 권한을 사용하여 사용자는 다음과 같은 명령어를 사용할 수 있습니다 ③LOAD 권한을 사용하여 사용자는 다음과 같은 명령어를 사용할 수 있습니다 ①SYSADM 권한을 가진 사용자로 로그인합니다. ②update dbm cfg 명령어를 이용하여 인스턴스 구성 변수인 SYSADM_GROUP, SYSCTRL_GROUP, SYSMAINT_GROUP, SYSMON_GROUP의 값을 OS에 정의된 그룹명>으로 지정합니다. 지정한 그룹에 속한 사용자는 간접적으로 권한을 부여 받습니다. ③update dbm cfg 명령어를 이용하여 인스턴스 구성 변수인 SYSADM_GROUP, SYSCTRL_GROUP, SYSMAINT_GROUP, SYSMON_GROUP의 값을 NULL로 지정 하면 기본값으로 복귀하므로, 해당 그룹은 더 이상 인스턴스 권한을 가질 수 없습니다. ④각 구성 변수의 변경은 인스턴스를 재시작해야 반영됩니다. ⑤get dbm cfg 명령어를 이용하여 인스턴스 권한과 관련된 구성 변수의 값을 확인합니다. ①SYSADM 권한을 가진 사용자로 데이터베이스에 접속합니다. ②grant문으로 DBADM과 LOAD 권한을 사용자에게 부여합니다. ③grant문으로 DBADM과 LOAD 권한을 그룹에 부여하면, 그룹에 속한 사용자는 간접적으로 권한을 부여 받습니다. ④revoke 문으로 DBADM과 LOAD 권한을 제거할 수 있습니다. ⑤DBADM과 LOAD 권한은 SYSCAT.DBAUTH 뷰를 통해 확인합니다. ①데이터베이스 오브젝트별 특권의 체계는 다음과 같이 분류됩니다. ②오브젝트별로 구체적인 특권명은 다음과 같으며, grant 문과 revoke문을 이용하여 사용자 또 는 그룹 단위로 제어할 수 있습니다. ①특권은 grant 문과 revoke 문으로 제어합니다. ②grant 문으로 OS에 정의된 그룹 또는 사용자에게 특권을 부여합니다. ③한 가지 이상의 특권을 한 개의 grant 문으로 부여할 수 있습니다. ④모든 사용자에게 권한을 부여하려면 PUBLIC이라는 키워드를 이용합니다. ⑤WITH GRANT OPTION을 사용하면, 권한을 부여받은 사용자는 다른 사용자에게 부여받은 권한을 전달할 수 있습니다. ⑥revoke 문으로 OS 그룹 또는 사용자에게 특권을 제거합니다. ①데이터베이스에 관한 특권은 다음과 같습니다. ②특권명>을 지정하여 그룹이나 사용자별로 제어합니다. ③grant 문과 revoke 문으로 그룹 또는 사용자에게 부여합니다. ④데이터베이스에 관한 특권은 카탈로그 뷰인 SYSCAT.DBAUTH 를 이용하여 확인합니다. ①테이블스페이스에 관한 특권은 다음과 같습니다. ②특권명>과 테이블스페이스명>을 지정하여 그룹이나 사용자별로 제어합니다. ③grant 문과 revoke 문으로 그룹 또는 사용자에게 부여합니다. ④테이블스페이스에 관한 특권은 SYSCAT.TBSPACEAUTH 뷰를 이용하여 확인합니다. ①스키마에 관한 특권은 다음과 같습니다. ②특권명>과 스키마명>을 지정하여 그룹이나 사용자별로 제어합니다. ③grant 문과 revoke 문으로 그룹 또는 사용자에게 부여합니다. ④스키마에 관한 특권은 SYSCAT.SCHEMAAUTH 뷰를 이용하여 확인합니다. ①테이블에 관한 특권은 다음과 같습니다. ②특권명>과 테이블명>을 지정하여 그룹이나 사용자별로 제어합니다. ③테이블에 관한 특권은 SYSCAT.TABAUTH 뷰를 이용하여 확인합니다. ①뷰에 관한 특권은 다음과 같습니다. ②테이블과 뷰는 동일한 방법으로 grant 문과 revoke 문으로 <특권명>과 <뷰명>을 지정하여 그룹이나 사용자별로 제어합니다. ③뷰에 관한 특권은 SYSCAT.TABAUTH 뷰를 이용하여 확인합니다. ①인덱스에 관한 특권은 다음과 같습니다. ②특권명>과 인덱스명>을 지정하여 그룹이나 사용자별로 제어합니다. ③grant 문과 revoke 문으로 그룹이나 사용자별로 제어합니다. ④인덱스에 관한 특권은 SYSCAT.INDEXAUTH 뷰를 이용하여 확인합니다. 패키지에 관한 특권은 다shing/img/dbguide/db2_operation_guide/111124_pro_thumb152.jpg" vspace="8"> 특권명>과 패키지명>을 지정하여 그룹이나 사용자별로 제어합니다. grant 문과 revoke 문으로 그룹이나 사용자별로 제어합니다. 패키지에 관한 특권은 SYSCAT.PACKAGEAUTH 뷰를 이용하여 확인합니다. UDF 또는 SP 에 관한 특권은 다음과 같습니다. UDF명> 또는 SP명> 을 지정하여 그룹이나 사용자별로 제어합니다. grant 문과 revoke 문으로 그룹이나 사용자별로 제어합니다. 루틴에 관한 특권은 SYSCAT.ROUTINEAUTH 뷰를 이용하여 확인합니다. 시퀀스에 관한 특권은 다음과 같습니다. 특권명>과 시퀀스명> 을 지정하여 그룹이나 사용자별로 제어합니다. grant 문과 revoke 문으로 그룹이나 사용자별로 제어합니다. 시퀀스에 관한 특권은 SYSCAT.SEQUENCEAUTH 뷰를 이용하여 확인합니다. 데이터베이스를 생성한 사용자는 해당 데이터베이스에 대한 DBADM 권한을 가지게 됩니다. 데이터베이스를 생성하면 간접적으로 다음의 특권이 PUBLIC에게 부여됩니다. DBADM 권한을 부여받은 그룹 또는 사용자는 간접적으로 데이터베이스에 대한 모든 특권을 부여받습니다. 테이블, 인덱스, 패키지 등의 데이터베이스 오브젝트를 생성한 사용자는 오브젝트의 소유자로서 CONTROL 특권을 가지게 됩니다. 패키지에 대한 EXECUTE 특권을 부여받으면, 패키지를 실행하는 동안에는 패키지에 포함된 정 적 SQL문에 대한 특권을 임시로 가지게 되므로, 해당 SQL문에 대한 명시적인 특권이 없는 사 용자도 패키지를 실행할 때는 해당 SQL문을 실행할 수 있습니다.권한과 특권
권한과 특권
사용자 인증
$ db2 connect to 데이터베이스명> user 사용자명> using 암호명>
$ db2 connect to 데이터베이스명>
SERVER 인증 유형
$ db2 get dbm cfg | grep AUTHENTICATION
데이터베이스 관리 프로그램 인증 (AUTHENTICATION) = SERVER
C:\> db2 catalog db 원격데이터베이스명> as 데이터베이스별명> at node
원격노드명>
C:\> list database directory | find “인증”
인증 = SERVER
C:\> db2 connect to 데이터베이스별명> user 서버의 사용자 ID> using 서버 의 암호명>
C:>db2 connect to sample01 user kr001325 using xx
SQL30082N 보안 이유 "24"("USERNAME AND/OR PASSWORD
INVALID")(으)로 인해 연결
시도에 실패했습니다. SQLSTATE=08001
CLIENT 인증 유형
$ db2 update dbm cfg using AUTHENTICATION CLIENT
$ db2stop force
$ db2start
C:\> db2 catalog db 원격데이터베이스명> as 데이터베이스별명> at node
원격노드명>
C:\> list database directory | find “인증”
인증 = CLIENT
C:\> db2 connect to 데이터베이스별명> user 클라이언트의 사용자 ID> using
클라이언트의 암호명>
C:> db2 connect to 데이터베이스별명> user 클라이언트의 사용자 ID> using
잘못된 클라이언트의 암호명>
SQL30082N 보안 이유 "24"("USERNAME AND/OR PASSWORD
INVALID")(으)로 인해 연결시도에 실패했습니다. SQLSTATE=08001
권한
권한별 기능
인스턴스 권한 제어 방법
$ login 인스턴스 사용자>
$ db2 update dbm cfg using SYSCTRL_GROUP 그룹명>
$ db2 update dbm cfg using SYSCTRL_GROUP NULL
$ db2stop force
$ db2start
$ db2 get dbm cfg | grep "_GROUP"
SYSADM 그룹 이름 (SYSADM_GROUP) = ADMGRP
SYSCTRL 그룹 이름 (SYSCTRL_GROUP) = CTRLGRP
SYSMAINT 그룹 이름 (SYSMAINT_GROUP) = MAINTGRP
SYSMON 그룹 이름 (SYSMON_GROUP) = MOMGRP데이터베이스 권한 제어 방법
$ login 인스턴스 사용자> $ db2 connect to 데이터베이스명>
$ db2 GRANT DBADM ON DATABASE TO USER 사용자명> $ db2 GRANT LOAD ON DATABASE TO USER 사용자명>
$ db2 GRANT DBADM ON DATABASE TO GROUP 그룹명> $ db2 GRANT LOAD ON DATABASE TO GROUP 그룹명>
$ 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 그룹명>
$ db2 "select grantee, DBADM, LOAD from syscat.dbauth"
특권
특권 제어 방법
$ db2 grant 특권명> on 오브젝트명> to group 그룹명>
$ db2 grant 특권명> on 오브젝트명> to user 사용자명>
$ db2 grant 특권명1>, 특권명2> on 오브젝트명> to user 사용자명>
$ db2 grant 특권명> on 오브젝트명> to public
$ db2 grant 특권명> on 오브젝트명> to user 사용자명> with grant
option
$ db2 revoke 특권명> on 오브젝트명> from user 사용자명>
데이터베이스 특권
$ db2 grant CONNECT on database to GROUP 그룹명>
$ db2 grant CONNECT on database to USER 사용자명>
$ db2 grant CONNECT on database to PUBLIC
$ db2 “select * from SYSCAT.DBAUTH”
테이블스페이스 특권
$ 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
$ db2 “select * from SYSCAT.TBSPACEAUTH ”
스키마 특권
$ 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
$ db2 “select * from SYSCAT.SCHEMAAUTH”
테이블 특권
$ db2 “select * from SYSCAT.TABAUTH”
뷰 특권
$ 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
$ db2 “select * from SYSCAT.TABAUTH”
인덱스 특권
$ db2 grant CONTROL on index 인덱스명> to GROUP 그룹명> $ db2 grant CONTROL on index 인덱스명> to USER 사용자명>
$ db2 grant CONTROL on index 인덱스명> to PUBLIC
$ db2 “select * from SYSCAT.INDEXAUTH”
패키지 특권
$ 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
$ db2 “select * from SYSCAT.PACKAGEAUTH”
루틴 특권
$ 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 사용자명>
$ db2 “select * from SYSCAT.ROUTINEAUTH”
시퀀스 특권
$ 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
$ db2 “select * from SYSCAT.SEQUENCEAUTH”
간접 권한과 특권
$ db2 create db 데이터베이스명>
$ db2 “select * from syscat.abauth”
$ db2 connect to 데이터베이스명>
$ db2 grant DBADM on database to user 사용자명>
$ db2 “select * from syscat.abauth"| grep ?i 사용자명>
$ db2 connect to 데이터베이스명>
$ db2 "create table 테이블명> (컬럼명> 데이터유형명>)"
$ db2 “select * from syscat.tabauth” | grep ?i 사용자명>
$ db2 connect to 데이터베이스명>
$ db2 grant execute on package 패키지명> to user 사용자명>
$ db2 “select * from syscat.packageauth” | grep ?i 사용자명>