首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查SQL Server登录名是否已存在

检查SQL Server登录名是否已存在
EN

Stack Overflow用户
提问于 2009-09-04 13:57:15
回答 11查看 207.8K关注 0票数 198

我需要检查SQL Server上是否已经存在特定的登录名,如果不存在,则需要添加它。

我找到了以下代码,用于将登录名实际添加到数据库中,但我想将其封装在一个IF语句中(以某种方式),以检查登录名是否首先存在。

CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword', 
DEFAULT_LANGUAGE=[us_english], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF 
GO

我知道我需要询问系统数据库,但不确定从哪里开始!

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-09-04 14:01:49

来自here

If not Exists (select loginname from master.dbo.syslogins 
    where name = @loginName and dbname = 'PUBS')
Begin
    Select @SqlStatement = 'CREATE LOGIN ' + QUOTENAME(@loginName) + ' 
    FROM WINDOWS WITH DEFAULT_DATABASE=[PUBS], DEFAULT_LANGUAGE=[us_english]')

    EXEC sp_executesql @SqlStatement
End
票数 149
EN

Stack Overflow用户

发布于 2009-12-22 17:35:57

在SQL Server 2005和更高版本中,有一种方法可以在不使用已弃用的syslogins视图的情况下执行此操作:

IF NOT EXISTS 
    (SELECT name  
     FROM master.sys.server_principals
     WHERE name = 'LoginName')
BEGIN
    CREATE LOGIN [LoginName] WITH PASSWORD = N'password'
END

之所以使用server_principals视图而不是sql_logins,是因为后者不会列出Windows登录。

如果您需要在创建用户之前检查特定数据库中是否存在用户,则可以执行以下操作:

USE your_db_name

IF NOT EXISTS
    (SELECT name
     FROM sys.database_principals
     WHERE name = 'Bob')
BEGIN
    CREATE USER [Bob] FOR LOGIN [Bob] 
END
票数 308
EN

Stack Overflow用户

发布于 2009-09-04 14:09:57

作为对此线程的一个小补充,通常您希望避免使用以sys.sys*开头的视图,因为微软包含它们只是为了向后兼容。对于您的代码,您可能应该使用sys.server_principals。这是假设您使用的是SQL 2005或更高版本。

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1379437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档