আমি কি কোনও নির্দিষ্ট ব্যবহারকারীর মালিকানাধীন সমস্ত ডাটাবেস অবজেক্টগুলি পুনরুদ্ধার করতে পারি?


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'অবশ্যই বিকল্পের ) মালিকানাধীন অবজেক্টগুলি পাবে । এই কোয়েরিটি যে ধরণের অবজেক্টগুলিতে টানছে সেগুলি হ'ল:

  • এফএন = এসকিউএল স্কেলার ফাংশন
  • FS = সমাবেশ (সিএলআর) স্কেলার-ফাংশন
  • এফটি = সমাবেশ (সিএলআর) সারণী-মূল্যবান ফাংশন
  • আইএফ = এসকিউএল ইনলাইন টেবিলের মূল্যবান ফাংশন
  • পি = এসকিউএল সঞ্চিত পদ্ধতি
  • পিসি = সমাবেশ (সিএলআর) সঞ্চিত-পদ্ধতি
  • টিএ = এসেম্বলি (সিএলআর) ডিএমএল ট্রিগার
  • টিএফ = এসকিউএল সারণী-মূল্যবান ফাংশন
  • টিআর = এসকিউএল ডিএমএল ট্রিগার
  • U = সারণী (ব্যবহারকারী-সংজ্ঞায়িত)
  • ভি = দেখুন

1
(এটি সন্ধানের মাধ্যমে পাওয়া গেছে) নির্দিষ্ট অবজেক্টের মেটাডেটা ভিউগুলিতে খনন না করে আপনি কী সেই তথ্য পাওয়ার সহজ উপায় জানেন? (এছাড়াও, আমি নিশ্চিত না কেন আপনি কেন এই ক্যোয়ারীতে প্রত্যাবর্তিত বস্তুর প্রকারগুলিকে সীমাবদ্ধ করলেন কেননা এটি কিছু আগ্রহের বিষয়বস্তু বাদ দিতে পারে))
জন সেগেল

ঠিক আছে, আমি আমার নিজস্ব দৃষ্টিভঙ্গি তৈরি করে শেষ করেছি। আপনি যদি আরও ভাল সমাধান সম্পর্কে জানেন তবে দয়া করে আমাকে জানান।
জন সেগেল

@ জোনসিগেল আমি উপরের দিকে একটি ইউনিয়ন ব্যবহার করে একটি লিখেছি। আপনি কি আমার পোস্ট করতে পারেন যাতে আমি আমার তুলনা করতে এবং উন্নতি করতে পারি?
সিউডোডাড

3

সমস্ত নন-সা ডাটাবেসের মালিকদের দেখানোর জন্য:

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

আপনার যদি এসকিউএল সিস্টেমের প্রয়োজন হয় তবে জব মালিকরা:

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
প্রতিটি ডাটাবেস অবজেক্টের জন্য প্রশ্ন জিজ্ঞাসা করা হয়েছিল কেবল ডাটাবেস নয়।
স্কল ওয়ার্ল্ডওয়াইড

@ স্কেল ওয়ার্ল্ডওয়াইড - তবে স্বীকৃত উত্তরটিতে মালিকানাধীন ডাটাবেসগুলি অন্তর্ভুক্ত নয়, সুতরাং এই উত্তরটি অতিরিক্ত সহায়ক। (মজার বিষয় হচ্ছে, এখানে ফিরে আসা 'মালিকের নামগুলি sys.datedia_prصولগুলির সারণীতেও স্বীকৃত উত্তরে উল্লিখিত নেই what's কী চলছে তা জানতে আগ্রহী) "
youcantryreachingme

2

চাকরীর জন্য, আপনি সিসলগিনগুলি ব্যবহার করতে পারবেন না কারণ মালিক কোনও গোষ্ঠীর অংশ হতে পারে এবং লগইনগুলিতে অস্তিত্ব রাখতে পারে। নীচে ব্যবহার করুন

select msdb.[dbo].[SQLAGENT_SUSER_SNAME](owner_sid), * 
from msdb.dbo.sysjobs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.