有沒有一種方法可以從中知道用戶(不是登錄名)是否已經在數據庫中創建?我的意思是用戶不是登錄,因爲我知道如何檢查登錄。我需要檢查在特定DB &中爲其創建的用戶。如何檢查用戶是否已經在數據庫中創建或不在SQL中?
這是爲登錄檢查代碼:
SELECT name FROM sys.server_principals WHERE name = 'test_user'
但如何對用戶?因爲我需要創建用戶併爲它分配一個角色,如果它沒有創建。否則,我會繼續創建。
感謝
有沒有一種方法可以從中知道用戶(不是登錄名)是否已經在數據庫中創建?我的意思是用戶不是登錄,因爲我知道如何檢查登錄。我需要檢查在特定DB &中爲其創建的用戶。如何檢查用戶是否已經在數據庫中創建或不在SQL中?
這是爲登錄檢查代碼:
SELECT name FROM sys.server_principals WHERE name = 'test_user'
但如何對用戶?因爲我需要創建用戶併爲它分配一個角色,如果它沒有創建。否則,我會繼續創建。
感謝
如何:
USE (your database you want to check the user's existence in)
SELECT *
FROM sys.database_principals
WHERE name = '(your user name to check here)'
sys.server_principals
顯示你在服務器級別定義登錄 - sys.database_principals
顯示您在數據庫級的主體(例如用戶帳戶)。
如果您發現sys.server_principals
,我很驚訝你有沒有發現sys.database_principals
。您可以加入基於sid
列的視圖。
這會告訴你匹配的用戶名對給定登錄名
USE MyDB
SELECT
sp.name AS ServerLoginName,
dp.name AS DBUserName
FROM
sys.server_principals sp
LEFT JOIN
sys.database_principals dp ON sp.sid = dp.sid
WHERE
sp.name = 'MyLogin'
謝謝「gbn」......它確實有效;) – Q8Y
這是更正確的答案。 SQL登錄可能會映射到名稱不同的數據庫用戶。 – themilkyninja
@themilkyninja,您可能必須同時應用兩項檢查(即one和marc_s之一)。如果要創建具有特定名稱的用戶,則必須檢查用戶名是否可用(通過運行marc_s的檢查)。另外,由於登錄和用戶之間的1對1鏈接,您必須檢查沒有用戶與登錄關聯(通過運行gbn的檢查)。 –
use SomeDatabase
go
/* built-in system function */
select database_principal_id('UserNameHere')
/* check if exists and drop */
if database_principal_id('UserNameHere') is not null
drop user 'UserNameHere'
go
歡迎來到Stackoverflow。你能否詳細說明你的答案,以便將來的用戶更好地理解你的回答。 – Sim
你可能會關心這種方法,以及...
IF DATABASE_PRINCIPAL_ID('domain\lanid') IS NULL
BEGIN
CREATE USER [domain\lanid] FOR LOGIN [domain\lanid] WITH DEFAULT_SCHEMA=[dbo]
EXEC sp_addrolemember N'db_ApplicationUserRole', N'domain\lanid'
END
@marc_s:我認爲用戶i CREATE USER可能與CREATE LOGIN中的登錄名不匹配。例如'CREATE USER marcs FROM LOGIN gbn' – gbn