检查SQL Serverlogin是否已经存在

我需要检查SQL Server上是否已经存在特定的login名,如果没有,那么我需要添加它。

我发现下面的代码实际上将login添加到数据库,但我想包装这个在IF语句(以某种方式)来检查login是否存在第一。

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

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

从这里

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

下面是在SQL Server 2005及更高版本中执行此操作的一种方法,不使用不build议使用的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,因为后者不列出Windowslogin名。

如果在创build特定数据库之前需要检查用户是否存在,那么可以这样做:

 USE your_db_name IF NOT EXISTS (SELECT name FROM sys.database_principals WHERE name = 'Bob') BEGIN CREATE USER [Bob] FOR LOGIN [Bob] END 

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

试试这个(用实际的login名replace“user”):

 IF NOT EXISTS( SELECT name FROM [master].[sys].[syslogins] WHERE NAME = 'user') BEGIN --create login here END 

这适用于SQL Server 2000。

 use master select count(*) From sysxlogins WHERE NAME = 'myUsername' 

在SQL 2005上,将第二行更改为

 select count(*) From syslogins WHERE NAME = 'myUsername' 

我不确定SQL 2008是什么,但是我猜测它和SQL 2005是一样的,如果不是这样的话,这会让你知道从哪里开始看。

你究竟想要什么来检查login或用户? 在服务器级别创buildlogin,并在数据库级别创build用户,因此login在服务器中是唯一的

还创build一个用户login,一个用户没有login是一个孤立的用户,并没有用,因为你不能执行sql serverlogin没有login

也许你需要这个

检查login

 select 'X' from master.dbo.syslogins where loginname=<username> 

上面的查询返回'X'如果login存在,否则返回null

然后创build一个login

 CREATE LOGIN <username> with PASSWORD=<password> 

这将在sql server中创build一个login名,但它只接受强密码

在你想要login的每个数据库中创build一个用户

 CREATE USER <username> for login <username> 

给用户分配执行权限

  GRANT EXECUTE TO <username> 

您必须拥有SYSADMIN权限或简称“sa”

你可以在数据库上编写一个sql程序

 create proc createuser ( @username varchar(50), @password varchar(50) ) as begin if not exists(select 'X' from master.dbo.syslogins where loginname=@username) begin if not exists(select 'X' from sysusers where name=@username) begin exec('CREATE LOGIN '+@username+' WITH PASSWORD='''+@password+'''') exec('CREATE USER '+@username+' FOR LOGIN '+@username) exec('GRANT EXECUTE TO '+@username) end end end 

首先,您必须使用syslogins视图检查login存在:

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

那么你必须检查你的数据库的存在:

 USE your_dbname IF NOT EXISTS (SELECT name FROM sys.database_principals WHERE name = 'your_dbname') BEGIN CREATE USER [your_dbname] FOR LOGIN [YourLoginName] END