특정 사용자에게 Agent 작업 권한 부여하기
한대성
Microsoft Premier Field Engineer
다음과 같은 환경을 고려해 봅시다.
DB 전체를 관리하는 관리자가 있습니다.
그리고, UserDB1, UserDB2 라고 하는 각기 다른 서비스를 하는 두 개의 데이터베이스가 있고, 각 데이터베이스에는 UserDB1User, UserDB2User 라고 하는 사용자가 있습니다.
이 사용자들은 자기의 DB에 대해서만 읽고 쓰는 권한을 가지며, 다른 DB에 대해서는 접근할 수 없습니다.
이런 상황일 때, UserDB1User는 UserDB1에다가 매일 데이터를 처리하는 SQL Agent Job 하나를 만들고 싶다고 관리자에게 요청합니다. 물론 UserDB2User도 마찬가지로 요구할 수 있겠지요.
DB 관리자는 귀찮습니다. 그냥 작업 만들어서 쓰라고 권한을 주고는 싶은데, 다른 작업들을 보거나 실행하거나 조작할 수 있으면 안됩니다. 즉, 자기 DB에 대한 작업만 보고 관리할 수 있도록 하고 싶은 것이지요.
의외로 간단한 방법이 있는데 잘 모르시는 분들이 많은 것 같아 이에 대한 방법을 간단히 설명 드리고자 합니다.
SQL Server Agent 작업과 관련된 권한은 msdb의 데이터베이스에 특별한 멤버 자격이 있습니다.
예로 설명드리겠습니다.
위의 두 번째 그림과 같이 UserDB1User를 더블 클릭해서 나타나는 로그인 속성 창에서 사용자 매핑 부분에서 msdb를 선택합니다. 그런 다음, 아래 부분에서 SQLAgentUserRole 역할을 체크해 줍니다.
자, 이제 UserDB1User로 Management Studio에 로그인 해 봅시다.
SQLAgentUserRole 권한이 있기 때문에 SQL Serve 에이전트라는 항목이 나타납니다.
이제 여기서 작업을 만들어 봅시다.
UserDB1User는 자기가 만든 작업만 나타납니다. 물론 관리자는 이 작업을 볼 수 있겠지요.
그럼, User2DBUser라는 로그인으로 UserDB2에 대한 작업을 생성해봅시다.
위와 같이 자기가 만든 작업에 대해서만 나타납니다. 이해가 가시죠?
자, 그럼 이제 조금 더 나아가 봅시다.
UserDB1User에게는 자신의 작업뿐만 아니라, 다른 작업들의 상태를 볼 수 있는 권한을 줍니다. 데이터베이스 멤버 역할에서 SQLAgentReader 역할을 체크합니다.
그런 다음, 새로 고침 해 보면 위와 같이 자기가 소유한 작업뿐만 아니라 모든 작업들을 볼 수 있습니다. 그럼 Job2_for_UserDB2 작업을 한 번 실행해 봅시다.
권한 없다라고 나옵니다. 즉, 다른 작업들을 볼 수만 있고 실행하거나 중지시킬 권한은 없는 것이 SQLAgentReader 역할입니다.
마지막으로 SQLAgentOperator 역할을 주면 실행, 중지 다 하겠지요.
SQLAgentOperator 역할을 가지고 있으면 작업의 소유자도 변경 가능합니다. 관리자가 작업을 만든 후, 그 작업을 해당 사용자에게 관리하도록 소유권을 변경해주면 해당 사용자는 넘겨받은 작업에 대해 관리할 수 있겠지요.
간단한 내용이지만 가끔씩 필요한 내용이라 정리해 봤습니다.
'연구개발 > SQL2005' 카테고리의 다른 글
SET XACT_ABORT(Transact-SQL) (0) | 2009.06.27 |
---|---|
데이터를 SQL Server로 가져오기 위한 여러 방법들 (0) | 2009.06.24 |
물리적 조각화에 의한 SCAN 성능 비교 (0) | 2009.06.20 |
SQL Server 2005 백업 설정 방법 (0) | 2009.06.20 |
SQL서버 성능카운터 활용을 위한 팁 (0) | 2009.06.20 |