কোনও এসকিউএল সার্ভার ডাটাবেসে কোনও ব্যবহারকারীর উপস্থিতি আছে কিনা তা পরীক্ষা করে দেখুন


28

আমি এসকিউএল সার্ভার ২০১২ এর সাথে কাজ করছি।

এটিই আমি পরীক্ষা করেছি:

USE [MyDatabase]
GO

IF NOT EXISTS (SELECT name 
                FROM [sys].[server_principals]
                WHERE name = N'IIS APPPOOL\MyWebApi AppPool')
Begin
    CREATE USER [IIS APPPOOL\MyWebApi AppPool] 
    FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO

কিন্তু, এই SELECT name FROM [sys].[server_principals]ব্যবহারকারীর উপস্থিতি থাকলে এই কোডটি ফিরে আসে না MyDatabase

কোনও ব্যবহারকারী উপস্থিত থাকলে আমি কীভাবে তা পরীক্ষা করতে পারি MyDatabase?


1
মনে রাখবেন যে sys.datedia_prصولগুলিতে ভূমিকা এবং ব্যবহারকারীদের একসাথে রয়েছে, তাই ব্যবহারকারীদের ফিল্টার করতে ভুলবেন না। সহজ রেফারেন্সের জন্য বর্তমানে চিহ্নিত চিহ্নিত উত্তরের বিরুদ্ধে আমি চূড়ান্ত ক্যোয়ারী আপডেট করছি।
মোইজ টানকিওয়ালা

উত্তর:


26

sys.database_principalsপরিবর্তে ব্যবহার করুন sys.server_principals

সুতরাং চূড়ান্ত ক্যোয়ারী এটির মতো দেখাবে (ব্যবহারকারী ফিল্টারটির জন্য অ্যাকাউন্টিং):

USE [MyDatabase]
GO

IF NOT EXISTS (SELECT [name]
                FROM [sys].[database_principals]
                WHERE [type] = N'S' AND [name] = N'IIS APPPOOL\MyWebApi AppPool')
Begin
    CREATE USER [IIS APPPOOL\MyWebApi AppPool] 
    FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO

2
এটির (বা অন্যান্য অবজেক্টের অস্তিত্বের পরীক্ষা করা) পাওয়ার দ্রুত উপায় হ'ল ডাটাবেস অবজেক্টে ডান ক্লিক করুন এবং "ড্রপ এবং ক্রিয়েট টু" নির্বাচন করুন যা সঠিক আইটেম না থাকলে এই ধারাটি উত্পন্ন করবে।
লোলিডিবিএ

15

আমি এই ধরণের জিনিসের জন্য SUSER_ID () এবং USER_ID () ব্যবহার করি:

-- Check SQL Server Login
IF SUSER_ID('SomeLogin') IS NULL
    CREATE LOGIN SomeLogin WITH PASSWORD = 'SomePassword';

-- Check database user
IF USER_ID('SomeUser') IS NULL
    CREATE USER SomeUser FOR LOGIN SomeLogin;

4
মাইক্রোসফ্টের সুপারিশ অনুসারে [ ডকস.মাইক্রোসফট.এইন / ইউএস / এসকিএল / t-sql / function/… , USER_ID অদূর ভবিষ্যতে পর্যায়ক্রমে শেষ হবে এবং পরিবর্তে ব্যবহারের জন্য প্রস্তাবিত ফাংশনটি হ'ল DATABASE_PRINCIPAL_ID [ ডকস.মাইক্রোসফট.কম / এন-
ইউএস

লিঙ্কটি নষ্ট হয়ে গেছে। নতুন লিঙ্ক: ডকস.মাইক্রোসফট.এইন.ইউএস
টি-

9

আরও পরিমার্জন কারণ এটি আরও অনুকূল পাঠযোগ্য-

USE [MyDatabase]
GO

IF DATABASE_PRINCIPAL_ID('IIS APPPOOL\MyWebApi AppPool') IS NULL
BEGIN
    CREATE USER [IIS APPPOOL\MyWebApi AppPool] 
    FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
END
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO

0

আপনি যদি রেজিস্টার্ড সার্ভার ব্যবহার করছেন তবে আপনি একবারে অনেকগুলি সার্ভার চেক করতে পারেন এবং এর সাথে সত্য / মিথ্যা ফিরিয়ে দিতে পারেন:

SELECT @@servername,    
    CASE 
        WHEN EXISTS(SELECT name FROM sys.database_principals WHERE name = 'LoginName') THEN 1 
        ELSE 0 
    END AS YesNo

আপনি database_principalsপরিবর্তে উল্লেখ করতে নিজের উত্তর আপডেট করতে চাইতে পারেন server_principals- প্রশ্নটি পরীক্ষা করুন - এটি ডাটাবেস স্তরের ব্যবহারকারীদের সম্পর্কে about
ম্যাক্স ভার্নন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.