เรามีผู้ใช้ที่กำลังออกจากและฉันจำเป็นต้องรู้ทุกวัตถุฐานข้อมูลที่เขาเป็นเจ้าของ มีแบบสอบถามที่จะให้ข้อมูลนี้หรือไม่?
เรามีผู้ใช้ที่กำลังออกจากและฉันจำเป็นต้องรู้ทุกวัตถุฐานข้อมูลที่เขาเป็นเจ้าของ มีแบบสอบถามที่จะให้ข้อมูลนี้หรือไม่?
คำตอบ:
สิ่งนี้จะทำให้คุณได้สิ่งที่คุณต้องการ:
;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'
แน่นอน) ประเภทของวัตถุที่แบบสอบถามดึงนี้คือ:
ในการแสดงเจ้าของฐานข้อมูลที่ไม่ใช่ 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
สำหรับงานคุณไม่สามารถใช้ syslogins ได้เนื่องจากเจ้าของอาจเป็นส่วนหนึ่งของกลุ่มและไม่มีอยู่ในการเข้าสู่ระบบ ใช้ด้านล่าง
select msdb.[dbo].[SQLAGENT_SUSER_SNAME](owner_sid), *
from msdb.dbo.sysjobs