2007~2011/SQL Server2010. 3. 2. 13:11

SQL 사용자 계정으로 데이터베이스에 로그온 했을 때, 전체 사용자 데이터베이스가 보이지 않고 자신이 소유자로 등록된 사용자 데비터베이스만 확인됩니다. 어떤 설정 때문에 전체 데이터베이스 목록이 보이지 않는 것일까요?


[환경]
SQL Server 2008 SP1


[현상]
SQL 사용자 laigo 계정으로 데이터베이스에 로그온 하였는데 자신이 master, tempdb 와 자신이 소유한 데이터베이스 목록만 확인이 됩니다. 모든 데이터베이스 목록이 확인되지 않는 원인 확인이 필요합니다.

1.  SSMS



2. 데이터베이스 조회

SELECT NAME FROM SYS.SYSDATABASES
/*
name
--------
master
tempdb
MESDATA
*/



[원인]

기본적으로 모든 데이터베이스 사용자는 Public Role에 포함되어 있으며 VIEW ANY DATABASE 권한이 부여되어 있습니다만 현재의 환경에서는 Public Role의 VIEW ANY DATABASE 서버 사용 권한이 REVOKE 되어 있습니다.


[해결방법]
1. 아래 쿼리를 사용하여 Public Role 에 VIEW ANY DATABASE 사용 권한을 부여합니다.

GRANT VIEW ANY DATABASE TO PUBLIC


2. 특정 로그인 계정에 VIEW ANY DATABASE 사용 권한을 부여하기 위해서 아래 쿼리를 사용할 수 있습니다.

GRANT VIEW ANY DATABASE TO <login>;


3. Pulbic Role 에 VIEW ANY DATABASE 사용 권한을 제거하는 방법은 아래와 같습니다.

REVOKE VIEW ANY DATABASE FROM PUBLIC



[분석결과]
VIEW ANY DATABASE 권한을 가진 보안 개체를 확인하였습니다만 'Public' 개체가 등록되어 있지 않습니다.

SELECT l.name as grantee_name, p.state_desc, p.permission_name
FROM sys.server_permissions AS p JOIN sys.server_principals AS l
ON   p.grantee_principal_id = l.principal_id
WHERE permission_name = 'VIEW ANY DATABASE' ;
GO
/*
결과 없음
*/

기본값은 아래와 같습니다.
/*
grantee_name      state_desc       permission_name
----------------------------------------------------
public            GRANT            VIEW ANY DATABASE
*/



[참고자료]
REVOKE Server Permissions (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms186308.aspx

VIEW ANY DATABASE Permission
http://msdn.microsoft.com/en-us/library/ms189077.aspx


작성자 : Lai Go / 작성일자 : 2010.03.02

Posted by 사용자 Lai Go

댓글을 달아 주세요

  1. DB 소유자만 볼수 있게 하려면 어떻게 설정해야 되죠?
    PUBLIC 사용자가 다른 DB리스트를 보는건 보안상 별로 안좋게 보이는데요 관리자만 볼수있게 해야되는데 DB 소유자만 위처럼 보이게 하는게 궁금합니다.

    2014.03.11 12:53 [ ADDR : EDIT/ DEL : REPLY ]
    • VIEW ANY DATABASE 키워드를 통해 검색해 보시면 도움되실 것 같습니다. SQLER.COM 에도 있습니다. :)
      http://www.sqler.com/?mid=bSQLQA&page=90&document_srl=484547

      2014.03.12 14:25 신고 [ ADDR : EDIT/ DEL ]