SQL에서 사용자 및 역할에 대한 액세스 제어

권한없는 외부인 및 내부자의 권위를 초과하여 시도하는 사람들의 관심을 끄는 핵심 비즈니스 데이터를 기가 바이트 단위로 보호하려는 데이터베이스 관리자 는 보안을 최우선 적으로 고려해야합니다. 모든 관계형 데이터베이스 관리 시스템 은 이러한 위협을 최소화하도록 설계된 일종의 고유 보안 메커니즘을 제공합니다. Microsoft Access 에서 제공하는 간단한 암호 보호부터 Oracle 및 Microsoft SQL Server와 같은 고급 관계형 데이터베이스가 지원하는 복잡한 사용자 / 역할 구조에 이르기까지 다양합니다. 이 기사에서는 SQL ( Structured Query Language) 을 구현하는 모든 데이터베이스에 공통적 인 보안 메커니즘에 중점을 둡니다. 함께, 우리는 데이터 액세스 제어를 강화하고 데이터의 안전을 보장하는 과정을 거칩니다.

사용자

서버 기반 데이터베이스는 모두 컴퓨터 운영 체제에서 사용되는 것과 유사한 사용자 개념을 지원합니다. Microsoft Windows NT 및 Windows 2000에있는 사용자 / 그룹 계층에 익숙하다면 SQL Server 및 Oracle에서 지원되는 사용자 / 역할 그룹이 매우 유사하다는 것을 알 수 있습니다.

데이터베이스에 액세스 할 각 사용자에 대해 개별 데이터베이스 사용자 계정을 작성하는 것이 좋습니다. 기술적으로 사용자간에 계정을 공유하거나 데이터베이스에 액세스해야하는 각 유형의 사용자에 대해 하나의 사용자 계정을 사용하는 것이 가능하지만 두 가지 이유로이 방법을 권장하지 않습니다. 첫째, 개인 책임을 제거합니다. 즉, 사용자가 데이터베이스를 변경하면 (5,000 달러를 인상한다고 가정) 감사 로그를 사용하여 특정 사용자에게 다시 추적 할 수 없습니다. 또한 특정 사용자가 조직을 떠나 데이터베이스에서 자신의 액세스 권한을 제거하려는 경우 모든 사용자가 의존하는 암호를 변경해야합니다.

사용자 계정을 만드는 방법은 플랫폼에 따라 다르므로 정확한 절차는 DBMS 관련 설명서를 참조해야합니다. Microsoft SQL Server 사용자는 sp_adduser 저장 프로 시저의 사용을 조사해야합니다. Oracle 데이터베이스 관리자는 CREATE USER 명령을 유용하게 사용할 수 있습니다. 또한 대체 인증 스키마를 조사 할 수도 있습니다. 예를 들어, Microsoft SQL Server는 Windows NT 통합 보안의 사용을 지원합니다. 이 구성표에서는 사용자가 Windows NT 사용자 계정별로 데이터베이스에 식별되므로 데이터베이스에 액세스하기 위해 추가 사용자 ID와 암호를 입력 할 필요가 없습니다. 이 접근법은 계정 관리의 부담을 네트워크 관리 직원으로 이동시키고 최종 사용자에게 단일 사인온을 쉽게 제공하기 때문에 데이터베이스 관리자들 사이에서 매우 인기가 있습니다.

역할

소수의 사용자가있는 환경에 있다면 사용자 계정을 만들고 직접 권한을 할당하면 충분할 수 있습니다. 그러나 많은 수의 사용자가있는 경우 계정 및 적절한 권한을 유지해야하는 부담으로 인해 많은 어려움을 겪을 수 있습니다. 이러한 부담을 줄이기 위해 관계형 데이터베이스는 역할 개념을 지원합니다. 데이터베이스 역할은 Windows NT 그룹과 유사하게 기능합니다. 사용자 계정은 역할에 할당되고 사용 권한은 개별 사용자 계정이 아닌 전체 역할에 할당됩니다. 예를 들어, DBA 역할을 작성한 다음 관리 직원의 사용자 계정을이 역할에 추가 할 수 있습니다. 이 작업이 끝나면 역할에 권한을 지정하기 만하면 모든 현재 및 미래의 관리자에게 특정 권한을 할당 할 수 있습니다. 다시 한 번 역할을 만드는 절차는 플랫폼마다 다릅니다. MS SQL Server 관리자는 sp_addrole 저장 프로 시저를 조사해야하며 Oracle DBA는 CREATE ROLE 구문을 사용해야합니다.

권한 부여

이제 데이터베이스에 사용자를 추가 했으므로 권한을 추가하여 보안을 강화할 차례입니다. 첫 번째 단계는 사용자에게 적절한 데이터베이스 사용 권한을 부여하는 것입니다. 우리는 SQL GRANT 문을 사용하여이를 수행 할 것이다.

다음은 명령문의 구문입니다.

부여 <사용 권한>
[ON

]
TO <사용자 / 역할>
[부여와 함께]

이제이 문장을 한 줄씩 살펴 보겠습니다. 첫 번째 행 인 GRANT 는 우리가 부여하는 특정 테이블 권한을 지정할 수있게합니다. 테이블 수준 사용 권한 (예 : SELECT, INSERT, UPDATE 및 DELETE) 또는 데이터베이스 사용 권한 (예 : CREATE TABLE, ALTER DATABASE 및 GRANT)이 될 수 있습니다. 단일 GRANT 문에서 둘 이상의 사용 권한을 부여 할 수 있지만 테이블 수준 사용 권한과 데이터베이스 수준 사용 권한은 단일 문에서 결합되지 않을 수 있습니다.

두 번째 줄, ON

은 테이블 수준 사용 권한에 영향을받는 테이블을 지정하는 데 사용됩니다. 이 줄은 데이터베이스 수준의 사용 권한을 부여하는 경우 생략됩니다. 세 번째 줄은 사용 권한이 부여되는 사용자 또는 역할을 지정합니다.

마지막으로 네 번째 행인 WITH GRANT OPTION은 선택 사항입니다. 이 행이 명령문에 포함되면 해당 사용자는 다른 사용자에게 동일한 권한을 부여 할 수도 있습니다. 권한이 역할에 지정되면 WITH GRANT OPTION을 지정할 수 없습니다.

예제들

몇 가지 예를 살펴 보겠습니다. 첫 번째 시나리오에서는 최근에 고객 레코드를 추가하고 유지 관리 할 42 명의 데이터 입력 연산자 그룹을 고용했습니다. 고객 테이블의 정보에 액세스하고이 정보를 수정하고 새 레코드를 테이블에 추가 할 수 있어야합니다. 데이터베이스에서 레코드를 완전히 삭제할 수 없어야합니다. 먼저 각 운영자에 대한 사용자 계정을 만든 다음 새 역할 인 DataEntry에 모두 추가해야합니다. 다음 SQL 문을 사용하여 적절한 권한을 부여해야합니다.

부여 선택, 삽입, 업데이트
고객
TO DataEntry

그리고 그게 전부입니다! 이제 데이터베이스 수준의 권한을 할당하는 경우를 살펴 보겠습니다. 우리는 DBA 역할의 멤버가 데이터베이스에 새 테이블을 추가 할 수있게하려고합니다. 또한 다른 사용자에게 동일한 권한을 부여 할 수 있기를 바랍니다. 다음은 SQL 문입니다.

GRANT CREATE TABLE
TO DBA
보조금과 함께

우리는 DBA가이 권한을 다른 사용자에게 할당 할 수 있도록 WITH GRANT OPTION 행을 포함 시켰습니다.

권한 제거

권한을 부여한 후에는 나중에 권한을 취소해야하는 경우가 있습니다. 다행스럽게도 SQL은 REVOKE 명령을 사용하여 이전에 부여한 권한을 제거합니다. 구문은 다음과 같습니다.

[권한 부여 옵션] ​​거부 <사용 권한>
ON


FROM <사용자 / 역할>

이 명령의 구문은 GRANT 명령의 구문과 유사합니다. 유일한 차이점은 WITH GRANT OPTION이 명령의 끝이 아닌 REVOKE 명령 행에 지정되어 있다는 것입니다. 예를 들어, 이전에 부여한 Mary의 레코드를 Customers 데이터베이스에서 제거 할 수있는 권한을 취소하려고한다고 가정 해 봅시다. 다음 명령을 사용합니다.

거부 취소
고객
메리로부터

그리고 그게 전부입니다! DENY 명령을 언급할만한 Microsoft SQL Server에서 지원되는 추가 메커니즘이 있습니다. 이 명령은 현재 또는 미래의 역할 구성원을 통해 가질 수있는 사용자의 권한을 명시 적으로 거부하는 데 사용할 수 있습니다. 구문은 다음과 같습니다.

거부 <사용 권한>
ON


TO <사용자 / 역할

예제들

앞의 예제로 돌아가서, Mary는 Customers 테이블에도 액세스 할 수있는 Managers 역할의 멤버이기도합니다. 이전 REVOKE 문으로는 테이블에 대한 액세스를 거부하기에는 충분하지 않습니다. 사용자 계정을 대상으로하는 GRANT 문을 통해 자신에게 부여 된 사용 권한을 제거하지만 관리자 역할로 멤버 자격을 통해 얻은 사용 권한에는 영향을 미치지 않습니다. 그러나 DENY 문을 사용하면 권한의 상속이 차단됩니다. 다음은 명령입니다.

부인 방지
고객
메리

기본적으로 DENY 명령은 데이터베이스 액세스 제어에 "부정적인 권한"을 작성합니다. 나중에 Mary가 Customers 테이블에서 행을 제거 할 수있는 권한을 부여하려는 경우 GRANT 명령을 사용할 수 없습니다. 이 명령은 기존의 DENY에 의해 즉시 무시 될 것이다. 대신 다음과 같이 REVOKE 명령을 사용하여 부정적인 권한 항목을 제거합니다.

거부 취소
고객
메리로부터

이 명령은 긍정적 인 권한을 제거하는 데 사용 된 명령과 정확히 동일 함을 알 수 있습니다. DENY 및 GRANT 명령은 모두 유사한 방식으로 작동하며 데이터베이스 액세스 제어 메커니즘에서 권한 (양수 또는 음수)을 작성한다는 점을 기억하십시오. REVOKE 명령은 지정된 사용자에 대한 모든 권한을 제거합니다. 이 명령이 실행되면 Mary는 해당 권한을 소유 한 역할의 구성원 인 경우 테이블에서 행을 삭제할 수 있습니다. 또는 DELETE 권한을 계정에 직접 제공하는 GRANT 명령을 발행 할 수 있습니다.

이 기사를 통해 표준 쿼리 언어 (Standard Query Language)가 지원하는 액세스 제어 메커니즘에 대해 많은 것을 배웠다. 이 소개에서는 좋은 출발점을 제공해야하지만, DBMS 문서를 참조하여 시스템에서 지원하는 향상된 보안 조치를 학습하는 것이 좋습니다. 많은 데이터베이스 가 특정 열에 대한 사용 권한 부여와 같은 고급 액세스 제어 메커니즘을 지원한다는 것을 알게 될 것입니다.