인덱스, 인덱스 생성 - create index, rowid, 사용자 및 권한관리, create user (유저 생성), 롤(Role), 권한 - grant, with grant option, public, revoke

2019. 4. 16. 19:05DateBase

--------------------------------인덱스-----------------------

오라클의 데이터베이스 객체
            테이블
            시퀀스
            뷰
            인덱스
                        - 오라클 데이터베이스 테이블에서 원하는 데이터를 빠르게 찾아갈 수 있도록 만들어진
                          데이터 구조
                        - 테이블의 데이터에 대한 색인정보를 보환하고 있는 객체다.
                           * 인덱스에 보관된 정보 = 데이터 + ROWID(데이터가 저장된 위치정보)
                        - 인덱스의 생성
                                    자동 생성 인덱스
                                                Primary Key, Unique 제약조건이 정의된 컬럼은 자동으로 인덱스가 생성된다.
                                    수동 생성 인덱스
                                                create index 인덱스명
                                                on 테이블명 (컬럼명, 컬럼명, ...)


                                                예시) 인덱스 생성
                                                
                                                create index sample_pro_name_ix
                                                on sample_products (product_name);
                                                

 

 


                                                


                                                // product_name은 인덱스가 있고 product_maker는 인덱스가 없다
                                                   코스트를 비교해 보면 인덱스가 있는게 비용이 적게 든다.


                                                예시2) 함수인덱스 생성

                                                create index emp_hire_year_ix
                                                on EMPLOYEES (to_char(hire_date,'yyyy'));
                                                



                                                
                                    - 인덱스 삭제 
                                                drop index 인덱스명;

                                    
                                                예시) 인덱스 삭제하기

                                                drop index emp_hire_year_ix;
                                                


                                                

                        - 인덱스가 필요한 경우
                                    1). where절에서 검색조건으로 자주 사용되는 경우
                                    2). 조인 조건으로 자주 사용되는 경우
                                    3). 해당 컬럼에 null값이 많이 포함된 경우
                                    4). 해당 컬럼에 다양한 값이 분포되어 있는 경우
                                    5). 큰 테이블에서 대부분의 조회 조건으로 검색되는 행이 2%~4% 미만인 경우

                        - rowid
                                    테이블에 저장된 데이터의 위치를 나타내는 주소값이다.
                                    사용자가 임의로 변경할 수 없고, 조회만 할 수 있다.
                                    예시 : AAAEAW AAE AAAACt AAA


                                            --------------------------------
                                             AAAEAW : 데이터베이스 식별을 위한 Data Object Number
                                             AAE       : 각각의 데이터 파일에 할당된 File Number 
                                             AAAACt  : 데이터 블록의 위치를 나타내는 Block Number
                                             AAA       : 블록내에 데이터가 저장된 행의 번호 Row Number





////////////////////////////////////사용자 및 권한 관리

사용자 및 권한 관리
            사용자
                        - 데이터베이스 시스템에 접속하고, 데이터베이스 객체를 생성/삭제,
                          데이터 조작을 할 때 필요한 사용자 계정
                        - 시스템권한을 가진 사용자만 사용자를 등록/삭제 할 수 있다.
                        
            권한(Privileges)
                        - 특정 SQL문을 실행할 수 있는 권리
                        - 시스템 권한
                                    * 데이터베이스 시스템을 사용(액세스)할 수 있는 권한
                                    * 시스템권한을 가진 사용자만 부여/박탈이 가능하다.
                        - 객체 권한
                                    * 데이터베이스 객체의 내용을 조작할 수 있는 권한
                                    * 해당 객체의 주인(소유자)가 부여/박탈이 가능하다.

            롤(Role)
                        - 사용자에게 부여할 수 있는 권한들의 집합니다.
                        - 여러 개의 권한을 묶어서 하나의 롤이 정의할 수 있다.
                           * 권한의 부여/박탈이 쉬워진다.
                        - 주로 사용되는 롤
                                    1). Connect Role
                                                - 오라클에 접솔할 수 있는 세션을 생성할 수 있는 권한
                                                - 일반적인 데이터베이스 객체를 생성하거나 조회할 수 있는 권한
                                    2). Resource Role
                                                - PL/SQL을 사용할 수 있는 권한
                                                   * 일반사용자에게는 Connect, Resource Role을 부여한다.
                                    3). DBA Role
                                                - 모든 시스템 권한이 부여된 Role이다.
                                                - 데이터베이스 관리자에게 부여된다.


<신규 유저 생성하기>
       
            1)유저 생성하기 - create user
                        create user 유저명
                        identified by 패스워드;

 

                       ※.  * 일반사용자에게는 Connect, Resource Role을 부여한다. 
                        




            2) 권한 부여하기 - grant
                        2-1) 권한 하나씩 부여하기
                                    grant 권한명, 권한명, 권한명, ...
                                    to 사용자명, 사용자명, ...
                                    



                        
                        2-2) Role(권한 묶음)부여하기            
                                    grant 롤이름, 롤이름, 롤이름, ...
                                    to 사용자명, 사용자명, ....
                                    



                        2-3) 객체권한 부여하기

                                    HTA 사용자가 생성한 테이블, 뷰, 시퀀스, 등에 대해서
                                    다른 사용자가 엑세스할 수 있는 권한을 주여하는 것

                                    grant 객체권한명, 객체권한명
                                    on 테이블명
                                    to 다른사용자명

                                    hr 사용자에게 sample_contacts 테이블에 대해서 select 권한을 부여함.

                                    grant SELECT
                                    on sample_contacts
                                    to hr;
                                    






                                    다른 예시) sample_contacts에서 contact_phone컬럼을 수정할 권한부여

                                                grant 권한명 (권한줄수있는 컬럼)
                                                on 테이블명
                                                to 권한 받을 유저명;

                                                grant update (contact_phone)
                                                on sample_contacts
                                                to hr;
                                                


            




                        2-4) with grant option은 다른사용자에게 부여한 권한을 권한받은 사용자가
                                    다시 또다른 사용자에게 받은권한을 부여할 수 있다.

                                    grant SELECT
                                    on sample_contacts
                                    to hr
                                    with grant option;
                                    




                        2-5) public은 모든 사용자에게 권한을 부여하는것이다.

                                    grant SELECT
                                    on sample_contacts
                                    to public;
                                    




            3) 권한 회수하기 - revoke

                        3-1) 권한 회수하기
                            revoke 객체권한명, 객에권한명
                            on 테이블명
                            from 다른사용자명, 다름사용자명;                        
                        




                        3-2) 롤 회수하기

                           revoke 권한명, 롤이름, ...
                           from 사용자명