SQL Server Script để tạo người dùng mới


99

Tôi muốn viết tập lệnh để tạo adminngười dùng (có abcdmật khẩu) trong SQL Server Express. Ngoài ra, tôi muốn chỉ định người dùng này admintoàn quyền.

Câu trả lời:


198

Dựa trên câu hỏi của bạn, tôi nghĩ rằng bạn có thể hơi nhầm lẫn về sự khác biệt giữa Người dùngĐăng nhập . Một Login là một tài khoản trên SQL Server như một toàn thể - một người có thể đăng nhập vào máy chủ và những người có mật khẩu. Một tài khoản là một Đăng nhập với quyền truy cập vào cơ sở dữ liệu cụ thể.

Tạo Đăng nhập rất dễ dàng và (rõ ràng) phải được thực hiện trước khi tạo tài khoản Người dùng để đăng nhập trong cơ sở dữ liệu cụ thể:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Đây là cách bạn tạo Người dùng có đặc quyền db_owner bằng cách sử dụng Đăng nhập bạn vừa khai báo:

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

Bây giờ, Đăng nhập linh hoạt hơn một chút so với những gì tôi làm ở trên. Ví dụ: tài khoản Đăng nhập được tạo tự động (trong hầu hết các cài đặt SQL Server) cho tài khoản Quản trị viên Windows khi cơ sở dữ liệu được cài đặt. Trong hầu hết các tình huống, tôi chỉ sử dụng nó khi tôi đang quản lý một cơ sở dữ liệu (nó có tất cả các đặc quyền).

Tuy nhiên, nếu bạn đang truy cập SQL Server từ một ứng dụng, thì bạn sẽ muốn thiết lập máy chủ cho "Chế độ hỗn hợp" (cả thông tin đăng nhập Windows và SQL) và tạo Đăng nhập như hình trên. Sau đó, bạn sẽ "CẤP" quyền sở hữu cho Đăng nhập SQL đó dựa trên những gì cần thiết cho ứng dụng của bạn. Xem tại đây để biết thêm thông tin.

CẬP NHẬT: Aaron chỉ ra việc sử dụng sp_addsrvrolemember để chỉ định một vai trò đã chuẩn bị cho tài khoản đăng nhập của bạn. Đây là một ý tưởng hay - nhanh hơn và dễ dàng hơn so với việc cấp đặc quyền theo cách thủ công. Nếu bạn google nó, bạn sẽ thấy rất nhiều liên kết. Tuy nhiên, bạn vẫn phải hiểu sự phân biệt giữa đăng nhập và người dùng.


1
Chính xác những gì tôi yêu cầu, cảm ơn bạn. Tôi không ngờ nó lại dễ dàng như vậy - và nó hoạt động hoàn hảo !!
Dave

33

Toàn quyền quản trị cho toàn bộ máy chủ hay một cơ sở dữ liệu cụ thể? Tôi nghĩ những người khác đã trả lời cho một cơ sở dữ liệu, nhưng cho máy chủ:

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';

Bạn có thể cần bỏ tham số CHECK_ tùy thuộc vào phiên bản SQL Server Express bạn đang sử dụng (hầu như luôn hữu ích khi đưa thông tin này vào câu hỏi của bạn).


Chính xác những gì tôi muốn Tôi đã cố gắng tạo đăng nhập bằng c # bằng lớp Microsoft.SqlServer.Management.Smo.Login. nhưng tôi không thể tạo. tác phẩm này với mã đơn giản trong c # nhờ
kordiseps

6

Nếu bạn muốn tạo một tập lệnh chung, bạn có thể làm điều đó với câu lệnh Thực thi với Thay thế bằng tên người dùng và tên cơ sở dữ liệu của bạn

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)

Tôi đã vô tình phản đối câu trả lời này nhưng bây giờ tôi không thể hoàn tác phản đối của mình mà không chỉnh sửa. Tôi đã đưa văn bản rác chỉ để loại bỏ downvote của tôi nhưng bây giờ tôi không thể loại bỏ không phải văn bản rác không downvote ... Tôi xin lỗi
sblandin

4

Bạn có thể dùng:

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

Để tạo thông tin đăng nhập (Xem tại đây để biết thêm chi tiết).

Sau đó, bạn có thể cần sử dụng:

CREATE USER user_name 

Để tạo người dùng được liên kết với thông tin đăng nhập cho cơ sở dữ liệu cụ thể, bạn cũng muốn cấp cho họ quyền truy cập.

( Chi tiết xem tại đây )

Bạn cũng có thể dùng:

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

Để thiết lập quyền cho lược đồ mà bạn đã gán cho người dùng.

( Chi tiết xem tại đây )

Hai lệnh khác mà bạn có thể thấy hữu ích là 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

điều này giúp bạn đầy đủ cho mạng sử dụng:

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

Tuần trước, tôi đã cài đặt Microsoft SQL Server 2014 Developer Edition trên hộp dành cho nhà phát triển của mình và ngay lập tức gặp sự cố mà tôi chưa từng thấy trước đây.

Tôi đã cài đặt các phiên bản SQL Server khác nhau không biết bao nhiêu lần và đây thường là một thủ tục không khó. Cài đặt máy chủ, chạy Bảng điều khiển quản lý, thật đơn giản. Tuy nhiên, sau khi hoàn tất cài đặt này, khi tôi cố gắng đăng nhập vào máy chủ bằng SSMS, tôi đã gặp lỗi như bên dưới:

Lỗi đăng nhập SQL Server 18456 “Đăng nhập không thành công cho người dùng… (Microsoft SQL Server, Lỗi: 18456)” Tôi đã quen với lỗi này nếu tôi nhập sai mật khẩu khi đăng nhập - nhưng đó chỉ là khi tôi đang sử dụng chế độ hỗn hợp ( Xác thực Windows và SQL). Trong trường hợp này, máy chủ chỉ được thiết lập bằng Windows Authentication và tài khoản người dùng là của riêng tôi. Tôi vẫn không chắc tại sao nó không thêm người dùng của tôi vào vai trò SYSADMIN trong quá trình thiết lập; có lẽ tôi đã bỏ lỡ một bước và quên thêm nó. Ở bất kỳ mức độ nào, không phải tất cả hy vọng đã mất.

Cách để khắc phục điều này, nếu bạn không thể đăng nhập bằng bất kỳ tài khoản nào khác vào SQL Server, là thêm thông tin đăng nhập mạng của bạn thông qua giao diện dòng lệnh. Để điều này hoạt động, bạn cần phải là Quản trị viên trên Windows cho PC mà bạn đã đăng nhập.

Dừng dịch vụ MSSQL. Mở Command Prompt bằng Run As Administrator. Thay đổi thư mục chứa tệp SQL Server EXE; mặc định cho SQL Server 2014 là “C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn”. Chạy lệnh sau: “sqlservr.exe –m”. Thao tác này sẽ khởi động SQL Server ở chế độ một người dùng. Trong khi mở Command Prompt này, hãy mở một cửa sổ khác, lặp lại bước 2 và 3. Trong cửa sổ Command Prompt thứ hai, hãy chạy “SQLCMD –S Server_Name \ Instance_Name” Trong cửa sổ này, hãy chạy các dòng sau, nhấn Enter sau mỗi dòng: 1

TẠO ĐĂNG NHẬP [domainName \ loginName] TỪ WINDOWS 2 ĐI 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 ĐI Sử dụng CTRL + C để kết thúc cả hai quá trình trong cửa sổ Dấu nhắc Lệnh; bạn sẽ được nhắc nhấn Y để kết thúc quá trình SQL Server.

Khởi động lại dịch vụ MSSQL. Đó là nó! Bây giờ bạn có thể đăng nhập bằng thông tin đăng nhập mạng của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.