我需要检查,如果特定的登录SQL Server上已经存在,如果没有,那么我就需要添加它。

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

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

我明白,我需要查询系统数据库,但不知道从哪里开始!

其他提示

下面是一个方式在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

作为未成年人除了这个线程,一般要避免使用有sys.sys开始*微软只包括他们的向后兼容性的意见。对于你的代码,你应该使用sys.server_principals。这是假设你正在使用SQL 2005或更高版本。

尝试此(与实际登录名替换 '用户'):

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,第2行更改为

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

我不知道有关SQL 2008,但我猜测,这将是一样的SQL 2005,如果不是,这应该给你的,其中t开始寻找一个想法。

什么是你到底要检查登录或用户? 登录是在服务器级别创建并在数据库级别创建一个用户,以便登录在服务器独特

也被针对登录创建的用户,而无需登录用户是孤立的用户,而不是用作ü不能执行SQL Server登录而不登录

也许u需要此

检查登录

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

上面的查询返回“X”,如果存在的登录失败返回空

然后创建登录

CREATE LOGIN <username> with PASSWORD=<password>

这产生了在SQL服务器的登录。但它仅接受强密码

创建每个数据库中的用户要为登录作为

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

这是为天青SQL:

IF (EXISTS(SELECT TOP 1 1 FROM sys.sql_logins WHERE [name] = '<login>'))
    DROP LOGIN [<login>];

来源:如何检查数据库用户是否已存在于天青SQL数据库

首先,必须使用syslogins中检查登录存在查看:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top