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
'Programming' 카테고리의 다른 글
자바 스크립트에서 HTML 특수 문자를 이스케이프 처리 할 수 있습니까? (0) | 2020.06.01 |
---|---|
Intellij-최신 Java 8 클래스를 사용할 수 없음-오류 :“@since 1.6 이상으로 문서화 된 API 사용 ..” (0) | 2020.06.01 |
UITableView가 ReloadData를 완료 한 시점을 알리는 방법? (0) | 2020.06.01 |
underscore.js를 사용하여 asc 및 desc 정렬을 수행하려면 어떻게해야합니까? (0) | 2020.06.01 |
MKMapView라는 클래스를 인스턴스화 할 수 없습니다. (0) | 2020.06.01 |