Programming

SQL Server 로그인이 이미 있는지 확인

procodes 2020. 6. 1. 21:09
반응형

SQL Server 로그인이 이미 있는지 확인


특정 로그인이 SQL Server에 이미 존재하는지 확인해야하며, 그렇지 않은 경우 추가해야합니다.

실제로 로그인을 데이터베이스에 추가하는 다음 코드를 찾았지만 IF 문으로 랩핑하여 로그인이 먼저 존재하는지 확인하고 싶습니다.

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 = 'CREATE LOGIN ' + QUOTENAME(@loginName) + ' 
    FROM WINDOWS WITH DEFAULT_DATABASE=[PUBS], DEFAULT_LANGUAGE=[us_english]')

    EXEC sp_executesql @SqlStatement
End

더 이상 사용되지 않는 syslogins보기를 사용하지 않고 SQL Server 2005 이상에서이를 수행하는 방법은 다음과 같습니다.

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

이 스레드를 약간 추가하면 일반적으로 Microsoft는 이전 버전과의 호환성을 위해 sys.sys *로 시작하는보기를 사용하지 않기를 원합니다. 코드에는 아마도 sys.server_principals를 사용해야합니다. 이것은 SQL 2005 이상을 사용한다고 가정합니다.


이것을 시도하십시오 (실제 로그인 이름으로 'user'를 대체하십시오).

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에서 두 번째 줄을

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

SQL 2008에 대해 잘 모르겠지만 SQL 2005와 동일 할 것으로 예상되며 그렇지 않은 경우 어디에서 시작하는지에 대한 아이디어를 제공해야합니다.


정확히 로그인 또는 사용자 확인을 원하십니까? 서버 레벨에서 로그인이 작성되고 데이터베이스 레벨에서 사용자가 작성되므로 서버에서 로그인이 고유합니다.

also a user is created against a login, a user without login is an orphaned user and is not useful as u cant carry out sql server login without a login

maybe u need this

check for login

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

the above query return 'X' if login exists else return null

then create a login

CREATE LOGIN <username> with PASSWORD=<password>

this creates a login in sql server .but it accepts only strong passwords

create a user in each database you want to for login as

CREATE USER <username> for login <username>

assign execute rights to user

 GRANT EXECUTE TO <username>

YOU MUST HAVE SYSADMIN permissions or say 'sa' for short

you can write a sql procedure for that on a database

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

This is for Azure SQL:

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

Source: How to check whether database user already exists in Azure SQL Database


First you have to check login existence using syslogins view:

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

Then you have to check your database existence:

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

참고URL : https://stackoverflow.com/questions/1379437/checking-if-a-sql-server-login-already-exists

반응형