배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Access 버전:   97
검색어:   그룹계정
제목:   보안 그리고 공유...일곱번째
     
 

New Page 2
  STEP> 따라하기

※ 아래 Daily Tip은 최천군님이 제공해주신 내용입니다.

우리는 지난 시간에 Crocii와 맛탱이, 엘케인, 비포앤에프터라는 사용자 계정 4개를 만들었습니다. 그리고 ‘세친구’라는 그룹계정을 하나 만들었습니다. 왜 그룹계정이 필요한가? 지난번에 언급 드린 바와 같이 권한 설정의 용이성 때문입니다. 단순히 편리함 때문만은 아니고 필수적인 요소이기도 합니다.

위의 네개의 사용자 계정중 Crocii계정만 Admins 그룹에 속하여 있습니다. 그리고 지난 시간에 Crocii계정에게 데이터베이스(파일) 열기, 단독으로 열기 그리고 관리 권한까지 부여 하였습니다.

그렇게 하나의 사용자 계정마다 권한을 설정해 줄 수도 있지만 사용자가 많다면 무척 번거로운 일입니다. 이럴 때 사용자 그룹 계정에 권한을 설정하면 그룹 내에 속해 있는 모든 사용자는 그룹에 설정된 권한을 그대로 상속 받게 됩니다.

또한 이렇게 그룹계정에 권한을 설정한 후 개별적으로 사용자 계정에 다시 권한 설정을 할 수 있습니다. 그렇다면 사용자 계정의 권한과 속해 있는 그룹의 권한이 서로 다를 경우는 어떻게 적용되는가? 두 계정 중 어느 한쪽만이 권한을 가져도 그에 해당하는 권한을 부여 받게 됩니다. 즉 합집합 (Or)으로 적용되는 것입니다.

그러므로 그룹 계정에 부여할 권한은 그룹 내에 속해 있는 사용자 계정이 모두 부여 받아도 보안상 문제가 없는 공통적인 권한만을 부여해 주어야 합니다.
그리고 각 사용자 계정별로 보다 높은 수준의 권한이 필요한 경우 개별적으로 설정해 줍니다.

그래서 사용자 계정보다 먼저 그룹 계정의 권한 설정을 하겠습니다. 가장 먼저 해야 하는 것은 물론 Admins 그룹이겠지요. 왜냐하면 어떤 계정도 모든 권한을 부여 받은 계정이 없다면 나중에 권한 설정을 조정할 수 없을 수도 없고 심지어 테이블을 열 수도 없게 될 수 있기 때문입니다. 그러므로 모든 권한을 가진 계정을 반드시 하나 만들어 두어야 합니다.

도구, 보안, 사용자 및 그룹 권한을 차례로 클릭합니다.

먼저 대화상자의 중간부분의 목록항목 중 그룹 옵션버튼을 선택합니다.
좌상단의 사용자/그룹 이름 목록상자에서 Admins를 클릭합니다.
다시 대화상자의 중간부분 오른쪽 개체 유형 콤보상자에서 적당한 개체타입을 선택하십시요. 물론 가장 먼저 설정해야 할 것은 데이터베이스 이어야 합니다.

이제 우상단의 개체 이름 목록상자에서 개체별로 권한 설정을 다르게 할 수 있습니다. Admins 그룹은 모든 개체에 대하여 모든 권한을 부여 하므로 그림과 같이 Shift 키 또는 Ctrl키를 이용하여 모든 개체를 선택하십시요.

이제 대화상자 하단의 사용 권한 항목에서 관리 체크박스에 체크하면 모든 권한이 체크 됩니다.
적용 버튼을 클릭하여 설정한 내용을 저장합니다.
다시 중간 부분 오른쪽의 개체 유형 콤보상자에서 다음 개체유형을 선택합니다. 4번부터 반복합니다.
이제 Admins 그룹에 속하는 사용자 계정은 그 자체에 아무 권한이 없더라도 모든 개체에 대하여 모든 권한을 부여 받게 됩니다.

지금 권한을 설정한 계정은 모든 개체에 대하여 모든 권한을 가지고 있다는 것이 됩니다. 그렇다면 그 계정은 무엇인가요? 어떻게 해 주어야 할까요? 그 계정이 Admin이건 아니면 다른 계정으로 들어와서 생성한 파일이기에 다른 사용자 계정이건 그 계정은 소유자 계정일 것입니다.

[참고 : 새 테이블/쿼리]

대화상자의 우측 상단에 있는 개체 이름 목록상자에 <새 테이블/쿼리>라는 항목이 있습니다. 다른 개체 유형에도 다 있습니다. 이것은 앞으로 누군가에 의해 즉, 어떤 사용자 계정에 의해 지금 이후에 새롭게 만들어질 개체에 기본적으로 어떠한 권한을 갖게 하겠는가를 설정해 주는 항목입니다.

사용자계정 또는 그룹 계정에 권한을 설정할 수 있는 권한은 그 개체 유형의 관리권한을 가지고 있는 계정만이 가능합니다. 관리 권한을 가지고 있다는 것은 해당하는 개체 유형에 대한 모든 권한을 가지고 있다는 것입니다.

아까의 대화상자에서 소유자 변경 탭을 클릭합니다.

그림과 같이 테이블과 소유자에 대한 정보가 나타납니다. 개체 유형 콤보상자에서 다른 개체 유형을 선택하여 각각의 개체에 대한 소유자를 변경해 줄 수 있습니다. 이 또한 해당하는 개체 유형에 대한 관리 권한이 있어야 가능합니다. 위 그림은 소유자가 Admin이었던 것을 Crocii로 바꾸어 준 것입니다.

[참고 : 개체수 많을때 소유자 변경하기]

Master 계정으로 액세스를 실행 합니다. 위 파일의 경우는 Crocii계정이 되겠지요. 빈 mdb 파일을 생성합니다.

메뉴에서 파일, 외부데이터 가져오기, 가져오기를 각각 클릭하여 원래의 데이터베이스 파일을 선택합니다. 모든 개체를 가져 옵니다. 이제 모든 개체의 소유자가 Master계정 즉, Crocii가 되었으며 위의 그림이 이런 작업 이후의 모습을 보여주는 것입니다. 단 이 작업을 하기 전에 먼저 각 그룹계정에서 <새 개체>에 대한 기본적인 권한을 설정해 두면 각 그룹계정은 설정한 권한 대로 각 개체들에 대한 권한을 부여 받게 됩니다. 나중에 다시 작업하지 않아도 되니 간편합니다.

소유자는 권한 설정이 되어 있지 않아도 모든 권한을 갖고 있는가?
아닙니다. 그 개체의 소유자일지라도 권한설정을 통해 제한적인 권한을 부여하면 그만큼의 권한만을 소유하게 됩니다. 다만 처음 개체를 생성할 때 생성한 계정이 소유자가 되고 이 때의 권한은 모든 권한을 부여 받은 상태가 됩니다.
그렇다면 굳이 위와 같이 번거로운 작업을 해 줄 필요가 있는가?
필요한 경우가 있습니다. 이 것에 대해서는 잠시 후에 다시 이야기 하기로 합니다.

이제 남은 두 가지 그룹 계정의 설정을 해 줄 차례입니다. 먼저 해야 할 것은 Users 그룹 계정입니다. 왜냐하면 이 계정은 현재 사용자 계정에 등록되어 있지 않은 사용자나 Admin계정을 통해 들어오는 사용자가 파일에 액세스 했을 때, 기본적으로 자동으로 부여해 주는 권한이기 때문입니다.
Admin 계정은 지난 번에 Admins 그룹에서 빼고 Users그룹에만 속하게 설정해 두었습니다.

각 개체 유형에 대해 하나씩 살펴 보겠습니다.

데이터베이스 항목에서 사용권한은 열기/실행, 단독으로 열기. 관리 입니다.
열기/실행이 체크되어 있지 않으면 이 파일을 열 수 없습니다.
작업 그룹 파일에 등록된 계정 이외의 계정, 또는 Admin 계정으로 파일을 열 수 없게 하려면 열기/실행의 체크를 해제 합니다.

단독으로 열기에 체크가 되어 있지 않으면 단독모드로 파일을 열 수 없습니다. 단독모드로 파일을 열면 다른 사용자가 네트워크를 통하여 같은 파일을 액세스 할 수 없게 됩니다. 또한 단독모드에서만 설정해 줄 수 있는 옵션들이 있습니다.

파일의 암호를 설정 또는 해제하는 작업은 단독모드로 파일을 열 때만 가능합니다.
또는 액세스 파일의 속성을 생성하거나 변경하는 작업도 단독으로 열기 권한이 있을 때만 가능합니다. 이 내용이 중요한 의미를 가지고 있습니다. 이 부분도 나중에 이야기 하겠습니다.

테이블 개체의 권한은 일곱 가지가 있습니다

디자인 읽기란 테이블을 디자인 보기로 열 수 있는가 없는가에 대한 권한이며 테이블 개체에 대한 최소의 권한 입니다.
디자인 수정이란 테이블을 디자인 보기로 열어 필드 구성 내용을 변경할 수 있는가에 대한 권한 입니다.
데이터 읽기는 어떤 형태로든 즉, 쿼리를 통해서 폼을 통해서 또는 외부 데이터액세스 드라이버를 통해서 아니면 직접 테이블의 데이터 값을 읽을 수 있는가에 대한 권한 입니다. 체크되어 있지 않으면 어떤 형태로든 테이블을 열 수 없습니다.
데이터 업데이트, 삽입, 삭제는 말 그대로 각각 수정, 새 데이터 삽입, 데이터 삭제에 대한 권한 입니다.

쿼리는 테이블과 동일하므로 생략 합니다.

폼의 권한은 네 가지 입니다.

열기/실행에 체크되어 있지 않으면 폼을 실행할 수 없습니다.
디자인 읽기는 폼을 디자인 보기로 열 수 있는가에 대한 권한 입니다.
디자인 수정은 디자인 보기로 연 후, 폼의 내용을 변경할 수 있는가에 대한 권한입니다.

이 두 가지 권한은 체크해 두어도 무방합니다. 나중에 mde 파일로 컴파일 하면 아무리 권한이 있어도 디자인 보기로 볼 수도 없고 내용을 변경할 수도 없습니다. 또한 경우에 따라 폼의 내용을 바꾸는 코드가 사용될 수 있습니다. 컨트롤의 컨트롤 원본을 바꾼다던가 컨트롤의 위치를 바꾼다던가 하는 작업을 코드를 통해 할 때 위의 권한이 없으면 실행 되지 않습니다.

보고서도 폼과 같은 내용이기에 생략합니다.
매크로 개체도 폼과 비슷합니다. 폼이란 것이 실상 코드로 이루어진 것이기 때문이지요.

세친구 그룹 계정에 대한 권한을 설정할 차례입니다.
상기와 같은 요령으로 하면 될 것입니다. 실제 사용자 그룹이므로 Users그룹과는 다른 권한을 부여해야 겠지요.
이제 각 사용자 계정별로 특별히 더 주어져야 하는 권한이 있다면 사용자 계정 별로 위와 동일한 방법으로 설정해 주면 됩니다.

이제는 실전 단계입니다.

개발이 완료된 후 개발자는 테이블의 정보가 그대로 사용자에게 드러나는 것을 원하지 않을 수 있습니다. 테이블의 데이터가 그대로 노출 된다면 사용자의 실수로 데이터의 무결성이 훼손될 수 있기 때문입니다. 또한 사용자에게 보여져서는 안 되는 보안 데이터가 있는 경우도 있을 겁니다.

테이블은 열리지 않게 하고 사용자에게 허용된 데이터만 액세스 하거나 다룰 수 있게 하고 싶을 때 다음과 같은 방법을 사용 하십시요.

예제의 Users 그룹계정의 테이블개체에 대한 권한은 예의 그림과 같이 아무것도 없습니다. 또한 Users그룹에 속한 Admin계정은 아예 권한이 전무합니다.
그런데 사용자가 Admin 계정으로 들어와 데이터를 액세스하게 하려 합니다.

먼저 Crocii 계정으로 데이터베이스를 엽니다.
예제의 보물이라는 테이블의 데이터를 액세스 하게 하려면 다음과 같이 쿼리를 작성하고 마우스 오른쪽 버튼을 클릭하여 속성항목을 클릭합니다.

위와 같이 속성창에서 실행 권한 항목을 소유자로 지정합니다.
쿼리를 SQL보기로 전환하여 SQL구문을 확인하면 아래와 같습니다.

SELECT 보물.*
FROM 보물
WITH OWNERACCESS OPTION;

WITH OWNERACCESS OPTION 이라는 생소한 문장이 보입니다. 이 문장의 의미는 테이블의 액세스 권한을 소유자의 권한으로부터 위임 받아 실행하라는 뜻입니다

소유자란? 쿼리를 작성한 사람입니다. 물론 이미 언급한 바와 같이 변경할 수 있습니다. 소유자 변경을 하지 않은 상태에서는 쿼리를 작성한 사람이 소유자 입니다. 즉 Crocii계정으로 들어와서 쿼리를 만들었으므로 이 쿼리의 소유자는 Crocii이고 Crocii계정이 보물이라는 테이블에 대해 가지고 있는 권한을 그대로 사용하라는 의미인 것입니다.

Crocii계정은 예의 테이블에 대한 모든 권한을 가지고 있으므로 위의 쿼리로 데이터를 읽는 것은 물론 삽입, 삭제, 수정을 할 수 있게 됩니다. 단 쿼리 자체에 대한 권한 정도에 우선합니다.

위의 쿼리를 Query1이라는 이름으로 저장하고 Users그룹 계정에서 저장한 쿼리에 대한 권한을 위와 같이 설정했습니다.

확인을 위해 위와 같은 내용의 쿼리를 WITH OWNERACCESS OPTION 없이 하나 더 만들어 Query2로 저장하고 Admin 계정으로 다시 들어갑니다.
보물 테이블을 더블 클릭 하자 다음과 같은 메시지 상자가 나타납니다.

역시나 문구가 이상합니다. 보물테이블을 열 수 있는 권한이 없습니다. 라고 이해하시면 됩니다.

이제 WITH OWNERACCESS OPTION이 없는 Query2를 실행 합니다.

위와 같은 메시지 상자가 나타났습니다.

WITH OWNERACCESS OPTION이 있는 Query1을 실행 합니다.

위와 같이 쿼리가 열렸습니다. 그런데 자세히 보니 새로운 데이터를 입력하는 마지막 빈 행이 보이지 않습니다. 내용을 수정하려고 해도 전혀 변경되지 않습니다.

다시 Crocii계정으로 들어가 Query2 쿼리에 WITH OWNERACCESS OPTION을 주고 모든 권한을 부여하였습니다. 아래와 같이 내용삽입을 위한 빈 행이 나타났고 데이터도 수정 또는 삭제 됩니다.

쿼리와 테이블의 권한이 일치하는 부분만 권한이 적용됩니다. 즉 교집합으로 적용됩니다.

사용자에 따라 그 사용자에게 노출해도 괜찮은 부분만 나타나도록 쿼리를 만들고 각 사용자에 따라 각각의 쿼리에 대한 권한 지정해 주면 될 것입니다. 또 응용하면 여러가지 다른 방법이 나올 수 있습니다.

하지만 이러한 방법은 사용자가 적고 누구인지 알고 있을 때 가능한 방법입니다. 물론 쿼리로 사용자 계정을 생성하고 그룹계정에 소속시키는 방법이 있고 모듈에서 사용한다면 빠르고 간편하게 작업해 줄 수도 있을 것입니다. 그러나 불특정다수에게 적용하기에는 한계가 있습니다.

다음번 팁에서는 응용편(?) 입니다. 위의 방법에 대한 응용일 수도 있고 불특정다수의 사용자에게 적용할 수 있는 응용법에 대해 설명 하도록 하겠습니다. 간단하지 않은 내용입니다. 대체로 응용편으로 가면서 어려워 하시는 분들이 많은 것 같아 아쉽게도 제대로 다루어 보지 못했는데 이번에는 어떨지 모르겠습니다.