ডকুমেন্টেশন থেকে :
- যদিও কোনও ডাটাবেসে অ্যাক্সেস সহ যে কোনও ব্যবহারকারী ডায়াগ্রাম তৈরি করতে পারেন, একবার ডায়াগ্রামটি তৈরি হয়ে গেলে, কেবলমাত্র ব্যবহারকারীরা এটি দেখতে পারেন এটি ডায়াগ্রামের নির্মাতা এবং db_owner ভূমিকাটির কোনও সদস্য।
- ডায়াগ্রামের মালিকানা কেবল db_owner ভূমিকা সদস্যদের মধ্যে স্থানান্তর করা যেতে পারে। ডায়াগ্রামের পূর্ববর্তী মালিককে ডাটাবেস থেকে সরানো থাকলে এটি কেবল সম্ভব।
- যদি কোনও চিত্রের মালিককে ডাটাবেস থেকে সরানো হয়, তবে ডায়াগ্রামে ডায়াগ্রামটি অবধি থাকবে যতক্ষণ না db_owner ভূমিকার কোনও সদস্য এটিকে খোলার চেষ্টা করে। সেই সময়ে db_owner সদস্য ডায়াগ্রামের মালিকানা নিতে বেছে নিতে পারেন।
সুতরাং মনে হচ্ছে আপনি নীচের মতো ভূমিকার সাথে এটি করতে সক্ষম হবেন না db_datareader
।
পর্দার আড়ালে, ম্যানেজমেন্ট স্টুডিও তালিকাটি চালাতে ডাকছে:
CREATE PROCEDURE dbo.sp_helpdiagrams
(
@diagramname sysname = NULL,
@owner_id int = NULL
)
WITH EXECUTE AS N'dbo'
AS
BEGIN
DECLARE @user sysname
DECLARE @dboLogin bit
EXECUTE AS CALLER;
SET @user = USER_NAME();
SET @dboLogin = CONVERT(bit,IS_MEMBER('db_owner'));
REVERT;
SELECT
[Database] = DB_NAME(),
[Name] = name,
[ID] = diagram_id,
[Owner] = USER_NAME(principal_id),
[OwnerID] = principal_id
FROM
sysdiagrams
WHERE
(@dboLogin = 1 OR USER_NAME(principal_id) = @user) AND
(@diagramname IS NULL OR name = @diagramname) AND
(@owner_id IS NULL OR principal_id = @owner_id)
ORDER BY
4, 5, 1
END
সুতরাং আপনি এটি ডকুমেন্টেশনের সাথে মেলে দেখতে পারেন।
এখন বেশ কয়েকটি কাজের ধারণা:
- একটি লগঅন ট্রিগার সালে আপডেট
principal_id
এর সব বর্তমান লগইন হিসাবে ডায়াগ্রামে। এর অর্থ পরবর্তী ব্যক্তি লগ ইন না করা পর্যন্ত তাদের সমস্ত চিত্রগুলিতে অ্যাক্সেস থাকবে ti অনুকূল নয়।
sysdiagrams
টেবিলটিতে নিজেই একটি ট্রিগার ব্যবহার করুন (এটি আসলে কোনও সিস্টেমের টেবিল নয়) এবং যখনই কোনও চিত্র তৈরি করা বা আপডেট করা হয় তখন প্রতিটি অধ্যক্ষের জন্য একটি কপি যুক্ত / আপডেট করুন (তাদের ব্যবহারকারীর নাম সংযুক্ত) app কোনওটিই অনুকূল নয়, এবং আপনার লোকেরা সারা দিন একে অপরের ডায়াগ্রামগুলি ওভাররাইট করতে পারে।
এখানে দ্বিতীয় কার্যবিধির একটি ধারণা দেওয়া হয়েছে - আপনাকে এখানে যা ঠিক রাখতে হবে তা হ'ল ডাটাবেস প্রিন্সিপালের একটি তালিকা যা আপনি ডায়াগ্রামগুলি অ্যাক্সেস করতে সক্ষম হতে চান (ডায়াগ্রামগুলি মুছে ফেলার জন্য আপনার কাছে কিছু থাকতে হবে) , এবং কিছু পর্যায়ক্রমিক রক্ষণাবেক্ষণ যা মুছে ফেলা হয়েছে এমন প্রিন্সিপালের জন্য চিত্রগুলি মুছে দেয়):
CREATE TRIGGER dbo.sysdiagrams_distribute
ON dbo.sysdiagrams
WITH EXECUTE AS N'dbo'
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @p TABLE(principal_id INT, name SYSNAME);
INSERT @p SELECT principal_id, name
FROM sys.database_principals
-- change this list:
WHERE name IN (N'test_blat_user', N'test_blat_user2', N'dbo');
UPDATE d
SET [version] = i.version, definition = i.definition
FROM inserted AS i
CROSS JOIN @p AS p
INNER JOIN dbo.sysdiagrams AS d
ON d.name = i.name
AND d.principal_id = p.principal_id;
INSERT dbo.sysdiagrams(name, principal_id, version, definition)
SELECT i.name, p.principal_id, i.version, i.definition
FROM inserted AS i
CROSS JOIN @p AS p
WHERE NOT EXISTS
(
SELECT 1 FROM dbo.sysdiagrams WHERE name = i.name
AND principal_id = p.principal_id
);
END
GO
বেশ কয়েকটি ডায়াগ্রাম তৈরি করার পরে, অবজেক্ট এক্সপ্লোরারের একটি সংক্ষিপ্ত সংস্করণ এই ব্যবহারকারীদের কাছে দেখতে কেমন হয়েছিল:
এখন, dbo
ডায়াগ্রামের সম্পূর্ণ কপিগুলি সংগ্রহ করবে, যা সম্ভবত প্রয়োজনীয় নয়, তবে আপনি সম্ভবত চান যে এগুলি বেশিরভাগ ক্ষেত্রে "মাস্টার" হতে পারে।