새 사용자를 만드는 SQL Server 스크립트


99

SQL Server Express에서 admin사용자 ( abcd비밀번호 사용) 를 만드는 스크립트를 작성하고 싶습니다 . 또한이 사용자에게 admin모든 권한 을 할당하고 싶습니다 .

답변:


198

귀하의 질문에 따르면 사용자로그인 의 차이점에 대해 약간 혼란 스러울 수 있다고 생각합니다 . 로그인 서버에 로그인 할 수 있으며, 누가 암호를 가진 사람 - 전체 SQL 서버의 계정입니다. 사용자 A는 로그인 특정 데이터베이스에 액세스 할 수있는.

로그인 생성 은 쉽고 특정 데이터베이스에서 로그인을위한 사용자 계정을 생성하기 전에 반드시 수행해야 합니다.

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

방금 선언 한 로그인 을 사용하여 db_owner 권한이 있는 사용자 를 만드는 방법은 다음과 같습니다 .

Use YourDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NewAdminName')
BEGIN
    CREATE USER [NewAdminName] FOR LOGIN [NewAdminName]
    EXEC sp_addrolemember N'db_owner', N'NewAdminName'
END;
GO

이제 로그인 은 위에 보이는 것보다 약간 더 유동적입니다. 예를 들어, 데이터베이스가 설치 될 때 Windows 관리자 계정에 대한 로그인 계정이 자동으로 생성됩니다 (대부분의 SQL Server 설치에서). 대부분의 경우 데이터베이스를 관리 할 때 사용합니다 (모든 권한이 있음).

그러나 응용 프로그램에서 SQL Server에 액세스하려는 경우 서버를 "혼합 모드"(Windows 및 SQL 로그인 모두)로 설정하고 위와 같이 로그인을 생성 할 수 있습니다. 그런 다음 앱에 필요한 사항에 따라 해당 SQL 로그인에 대한 권한을 "GRANT"합니다. 자세한 내용은 여기 를 참조하십시오.

업데이트 : Aaron은 sp_addsrvrolemember를 사용하여 로그인 계정에 준비된 역할을 할당한다고 지적합니다. 이것은 좋은 생각입니다. 권한을 수동으로 부여하는 것보다 빠르고 쉽습니다. Google을 검색하면 많은 링크가 표시됩니다. 그러나 로그인과 사용자의 차이점을 이해해야합니다.


1
정확히 내가 요구 한 것입니다. 감사합니다. 너무 쉬울 줄은 몰랐고 완벽하게 작동하리라고 생각했습니다 !!
Dave

33

전체 서버 또는 특정 데이터베이스에 대한 전체 관리자 권한이 있습니까? 다른 사람들은 데이터베이스에 대해 대답했지만 서버에 대해서는 다음과 같이 대답했습니다.

USE [master];
GO
CREATE LOGIN MyNewAdminUser 
    WITH PASSWORD    = N'abcd',
    CHECK_POLICY     = OFF,
    CHECK_EXPIRATION = OFF;
GO
EXEC sp_addsrvrolemember 
    @loginame = N'MyNewAdminUser', 
    @rolename = N'sysadmin';

사용중인 SQL Server Express 버전에 따라 CHECK_ 매개 변수를 생략해야 할 수 있습니다 ( 질문에이 정보를 포함 하는 것이 거의 항상 유용합니다).


정확히 내가 원하는 것은 Microsoft.SqlServer.Management.Smo.Login 클래스를 사용하여 C #으로 로그인을 만들려고했습니다. 그러나 나는 만들 수 없었다. 이것은 C # 감사의 간단한 코드로 작동합니다
kordiseps

6

일반 스크립트를 생성하려면 사용자 이름과 데이터베이스 이름으로 Replace 문을 사용하여 실행할 수 있습니다.

Declare @userName as varchar(50); 
Declare @defaultDataBaseName as varchar(50);
Declare @LoginCreationScript as varchar(max);
Declare @UserCreationScript as varchar(max);
Declare @TempUserCreationScript as varchar(max);
set @defaultDataBaseName = 'data1';
set @userName = 'domain\userName';
set @LoginCreationScript ='CREATE LOGIN [{userName}]
FROM WINDOWS 
WITH DEFAULT_DATABASE ={dataBaseName}'

set @UserCreationScript ='
USE {dataBaseName}
CREATE User [{userName}] for LOGIN [{userName}];
EXEC sp_addrolemember ''db_datareader'', ''{userName}'';
EXEC sp_addrolemember ''db_datawriter'', ''{userName}'';
Grant Execute on Schema :: dbo TO [{userName}];'
/*Login creation*/
set @LoginCreationScript=Replace(Replace(@LoginCreationScript, '{userName}', @userName), '{dataBaseName}', @defaultDataBaseName)
set @UserCreationScript =Replace(@UserCreationScript, '{userName}', @userName)
Execute(@LoginCreationScript)

/*User creation and role assignment*/
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', @defaultDataBaseName)
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db2')
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db3')
Execute(@TempUserCreationScript)

의도 치 않게이 답변에 반대 투표를했지만 이제 편집 없이는 내 반대 투표를 취소 할 수 없습니다. 난 그냥 내 downvote을 제거하기 위해 정크 텍스트를 넣어했지만 지금은 어느 정크 텍스트 어느 것도 downvote을 제거 할 수 없습니다 ... 미안
sblandin

4

당신이 사용할 수있는:

CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO 

로그인을 생성하려면 (자세한 내용은 여기 를 참조하십시오).

그런 다음 다음을 사용해야 할 수 있습니다.

CREATE USER user_name 

특정 데이터베이스에 대한 로그인과 관련된 사용자를 만들려면 액세스 권한도 부여해야합니다.

(자세한 내용은 여기 를 참조 하십시오 )

다음을 사용할 수도 있습니다.

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name

사용자에게 할당 한 스키마에 대한 권한을 설정합니다.

(자세한 내용은 여기 를 참조 하십시오 )

유용하다고 생각되는 두 가지 다른 명령은 ALTER USERALTER LOGIN 입니다.


2
CREATE LOGIN AdminLOGIN WITH PASSWORD = 'pass'
GO


Use MyDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'AdminLOGIN')
BEGIN
    CREATE USER [AdminLOGIN] FOR LOGIN [AdminLOGIN]
    EXEC sp_addrolemember N'db_owner', N'AdminLOGIN'
    EXEC master..sp_addsrvrolemember @loginame = N'adminlogin', @rolename = N'sysadmin'
END;
GO

다음을 사용하여 네트워크에 대한 전체 도움말 :

1- Right-click on SQL Server instance at root of Object Explorer, click on Properties
Select Security from the left pane.

2- Select the SQL Server and Windows Authentication mode radio button, and click OK.

3- Right-click on the SQL Server instance, select Restart (alternatively, open up Services and restart the SQL Server service).

4- Close sql server application and reopen it

5- open 'SQL Server Configuration Manager' and tcp enabled for network

6-Double-click the TCP/IP protocol, go to the IP Addresses tab and scroll down to the IPAll section.

7-Specify the 1433 in the TCP Port field (or another port if 1433 is used by another MSSQL Server) and press the OK 

8-Open in Sql Server: Security And Login  And Right Click on Login Name And Select Peroperties And Select Server Roles And 
  Checked The Sysadmin And Bulkadmin then Ok.
9-firewall: Open cmd as administrator and type: 
      netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT

0

지난주에 저는 Microsoft SQL Server 2014 Developer Edition을 제 개발 용 박스에 설치했고 즉시 이전에 본 적이없는 문제에 직면했습니다.

다양한 버전의 SQL Server를 수없이 설치했으며 일반적으로 고통스러운 절차입니다. 서버를 설치하고 관리 콘솔을 실행하면 간단합니다. 하지만이 설치를 완료 한 후 SSMS를 사용하여 서버에 로그인하려고 할 때 아래와 같은 오류가 발생했습니다.

SQL Server 로그인 오류 18456 "Login failed for user… (Microsoft SQL Server, 오류 : 18456)"로그인 할 때 잘못된 암호를 입력하면이 오류가 표시되는 데 익숙하지만 혼합 모드를 사용하는 경우에만 발생합니다 ( Windows 및 SQL 인증). 이 경우 서버는 Windows 인증만으로 설정되었고 사용자 계정은 내 소유였습니다. 설정하는 동안 내 사용자를 SYSADMIN 역할에 추가하지 않은 이유가 아직 확실하지 않습니다. 아마도 나는 한 단계를 놓치고 그것을 추가하는 것을 잊었습니다. 어쨌든 모든 희망을 잃은 것은 아닙니다.

SQL Server에 다른 계정으로 로그온 할 수없는 경우이 문제를 해결하는 방법은 명령 줄 인터페이스를 통해 네트워크 로그인을 추가하는 것입니다. 이 작업을 수행하려면 로그온 한 PC의 Windows 관리자 여야합니다.

MSSQL 서비스를 중지하십시오. 관리자 권한으로 실행을 사용하여 명령 프롬프트를 엽니 다. SQL Server EXE 파일이있는 폴더로 변경하십시오. SQL Server 2014의 기본값은 "C : \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn"입니다. 다음 명령을 실행합니다. "sqlservr.exe –m". 단일 사용자 모드에서 SQL Server를 시작합니다. 이 명령 프롬프트를 열어 둔 채로 2 단계와 3 단계를 반복하여 다른 명령 프롬프트를 엽니 다. 두 번째 명령 프롬프트 창에서 "SQLCMD –S Server_Name \ Instance_Name"을 실행합니다.이 창에서 다음 줄을 실행하고 각 줄을 입력 한 후 Enter 키를 누릅니다. 1

CREATE LOGIN [domainName \ loginName] FROM WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN'4 GO 명령 프롬프트 창에서 두 프로세스를 모두 종료하려면 CTRL + C를 사용합니다. SQL Server 프로세스를 종료하려면 Y를 누르라는 메시지가 표시됩니다.

MSSQL 서비스를 다시 시작하십시오. 그게 다야! 이제 네트워크 로그인을 사용하여 로그인 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.