题
我需要检查,如果特定的登录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
您可以使用内置的功能:
SUSER_ID ( [ 'myUsername' ] )
经由
IF [value] IS NULL [statement]
像:
IF SUSER_ID (N'myUsername') IS NULL
CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword',
DEFAULT_LANGUAGE=[us_english],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF
GO
https://technet.microsoft.com /en-us/library/ms176042(v=sql.110).aspx
这工作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>];
首先,必须使用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