특정 사용자가 소유 한 모든 데이터베이스 개체를 검색 할 수 있습니까?


16

우리는 떠나는 사용자가 있으며 소유하고있는 모든 데이터베이스 개체를 알아야합니다. 이 정보를 제공하는 쿼리가 있습니까?

답변:


22

이것은 당신이 찾고있는 것을 얻을 것입니다 :

;with objects_cte as
(
    select
        o.name,
        o.type_desc,
        case
            when o.principal_id is null then s.principal_id
            else o.principal_id
        end as principal_id
    from sys.objects o
    inner join sys.schemas s
    on o.schema_id = s.schema_id
    where o.is_ms_shipped = 0
    and o.type in ('U', 'FN', 'FS', 'FT', 'IF', 'P', 'PC', 'TA', 'TF', 'TR', 'V')
)
select
    cte.name,
    cte.type_desc,
    dp.name
from objects_cte cte
inner join sys.database_principals dp
on cte.principal_id = dp.principal_id
where dp.name = 'YourUser';

이것은 특정 사용자가 소유 한 객체를 가져옵니다 ( 'YourUser'물론 대체물 ). 이 쿼리가 가져 오는 객체 유형은 다음과 같습니다.

  • FN = SQL 스칼라 함수
  • FS = 어셈블리 (CLR) 스칼라 함수
  • FT = 어셈블리 (CLR) 테이블 반환 함수
  • IF = SQL 인라인 테이블 반환 함수
  • P = SQL 저장 프로 시저
  • PC = 조립 (CLR) 저장 프로 시저
  • TA = 조립 (CLR) DML 트리거
  • TF = SQL 테이블 반환 함수
  • TR = SQL DML 트리거
  • U = 테이블 (사용자 정의)
  • V =보기

1
(검색을 통해이를 발견했습니다.) 여기에는 Service Broker 메시지 유형과 같은 스키마 범위가 아닌 개체는 포함되지 않습니다. 특정 객체 메타 데이터보기를 모두 파지 않고 해당 정보를 쉽게 얻을 수있는 방법을 알고 있습니까? (또한 관심있는 개체를 제외 할 수 있으므로이 쿼리에서 반환 된 개체 유형을 제한 한 이유를 잘 모르겠습니다.)
Jon Seigel

글쎄, 나는 내 자신의 견해를 만들었습니다. 더 나은 해결책을 알고 있다면 알려주십시오.
Jon Seigel

@ JonSeigel 위의 UNION을 사용하여 작성했습니다. 비교하고 개선 할 수 있도록 귀하의 게시물을 게시 할 수 있습니까?
PseudoToad

3

sa가 아닌 데이터베이스 소유자를 모두 표시하려면 다음을 수행하십시오.

SELECT suser_sname( owner_sid ) OwnerID , * FROM sys.databases where suser_sname( owner_sid ) <> 'sa'

SQL 시스템 작업 소유자가 필요한 경우 :

select s.name,l.name  
from  msdb..sysjobs s 
left join master.sys.syslogins l on s.owner_sid = l.sid 
where l.name is not null and l.name <> 'sa'
order by l.name

1
데이터베이스 자체뿐만 아니라 모든 데이터베이스 개체에 대한 질문이있었습니다.
SqlWorldWide

@SqlWorldWide-허용 된 답변에는 소유 한 데이터베이스가 포함되지 않으므로이 답변이 도움이됩니다. (재미있게, 여기에 반환 된 '소유자'이름은 허용 된 답변에서 참조 된 sys.database_principals 테이블에도 존재하지 않습니다. 무슨 일이 일어나고 있는지 알고 싶습니다.)
youcantryreachingme

2

작업의 경우 소유자가 그룹의 일부일 수 있으며 로그인에 없을 수 있으므로 syslogins를 사용할 수 없습니다. 아래를 사용하십시오

select msdb.[dbo].[SQLAGENT_SUSER_SNAME](owner_sid), * 
from msdb.dbo.sysjobs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.