컴퓨터2007.11.15 14:42
exec sp_MSdbuseraccess  N'db', N'%'
 
이 프로시져는 사용자가 접근가능한 모든 데이터베이스 목록을 확인 할때 사용을 합니다.
별로 쓰일 용도가 없을것 같지만, MSSQL 관리도구중 사용이 간단한 엔터프라이즈 메니져(Enterprise Manager. 이하 EM)로
접속을 하면 모든 데이터베이스 목록을 불러오는 부분에서 사용이 됩니다.

 
Microsoft 기술문서에 적혀있는 부분을 인용하면 다음과 같습니다.
기술문서 : KB88969
CAUSE
SQL Server Enterprise Manager calls the sp_MSdbuseraccess stored procedure to determine the accessibility of each database. The sp_MSdbuseraccess stored procedure then runs against every database in SQL Server to determine the user’s permission level in that database. For x number of databases, the sp_MSdbuseraccess stored procedure will run x + 1 times. These multiple calls can take several minutes to finish. A busy system can make the calls take longer to finish.

요약하면, "SQL 서버의 EM 으로 접속을 힐때 각각의 데이터베이스에 접속이 가능한지를 확인하는 저장프로시져라서, 모든 데이터베이스에 대해서 실행이 되기때문에 데이터베이스의 총갯수 + 1번 실행이 되어 로드율이 높을경우, 결과를 확인하는것이 오래걸린다 " 라는 이야기 입니다.
 
많은 분들이 극찬을 하시는 MSSQL 도움말 을 보면 다음과 같이 나옵니다. 

MSSQL 도움말

sp_MShasdbaccess
사용자가 액세스할 수 있는 모든 데이터베이스의 이름과 소유자를 나열합니다.

구문
sp_MShasdbacess

반환 코드 값
0(성공) 또는 1(실패)

사용 권한
public 역활에 대한 기본 권한을 실행합니다.
 
빈번하게 사용되는 EM 이고, 응답시간이 느려서 EM 이 시간제한을 무제한으로 변경하여도 시간제한으로 끊어지는 현상 이 발생하는 힘든 상황에서도 이 프로시져를 수정하여서 응답속도를 줄일수만 있다면 상당한 효과를 볼수 있습니다. 사용량이 많은 SQL 서버의 경우, EM 으로의 작업이 어렵습니다. 그나마 로컬(터미널/콘솔)에서의 작업은 조금 느려도 할만하겠지만, 외부에서 EM 을 이용한 작업은 정말 눈물을 머금게합니다.
이러한 저와 같은 EM 에 최적화(?)되어 있는 사용자들에게는 반드시 필요한 부분이고, 저또한 사용자의 하나로써 적극 권장합니다.

세부 쿼리 보기


 사용방법은 간단합니다.
위의 쿼리를 쿼리분석기로 실행만 하면 바로 적용이 됩니다.

1. EM 에 접속해서 현재의 상황을 확인합니다. 2. 위의 코드를 쿼리분석기에 입력합니다.
3. 쿼리를 실행합니다. 4. EM 으로 접속을 해봅니다.


위 테스트는 일반 사용자계정을 대상으로 진행을 하였습니다. 관리자(SystemAdmin)계정은 모든 데이터베이스에 접근권한이 있기때문에 적용을 하여도 차이가 없습니다.

출처 : MS 기술문서 KB889696
Posted by Zasfe