ฉันต้องการเขียนสคริปต์เพื่อสร้างadmin
ผู้ใช้ (ด้วยabcd
รหัสผ่าน) ใน SQL Server Express นอกจากนี้ฉันต้องการมอบหมายadmin
สิทธิ์แบบเต็มให้กับผู้ใช้รายนี้
ฉันต้องการเขียนสคริปต์เพื่อสร้างadmin
ผู้ใช้ (ด้วยabcd
รหัสผ่าน) ใน SQL Server Express นอกจากนี้ฉันต้องการมอบหมายadmin
สิทธิ์แบบเต็มให้กับผู้ใช้รายนี้
คำตอบ:
ขึ้นอยู่กับคำถามของคุณผมคิดว่าคุณอาจจะสับสนเล็กน้อยเกี่ยวกับความแตกต่างระหว่างที่ผู้ใช้และเข้าสู่ระบบ การเข้าสู่ระบบคือบัญชีบน SQL Server โดยรวม - ผู้ที่สามารถเข้าสู่ระบบเซิร์ฟเวอร์และผู้ที่มีรหัสผ่าน ผู้ใช้เป็นเข้าสู่ระบบด้วยการเข้าถึงฐานข้อมูลที่เฉพาะเจาะจง
การสร้างการเข้าสู่ระบบเป็นเรื่องง่ายและต้องทำ (ชัดเจน) ก่อนที่จะสร้างบัญชีผู้ใช้สำหรับการเข้าสู่ระบบในฐานข้อมูลเฉพาะ:
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
ตอนนี้เข้าสู่ระบบลื่นไหลกว่าที่ฉันทำไว้ข้างต้นเล็กน้อย ตัวอย่างเช่นบัญชีล็อกอินจะถูกสร้างขึ้นโดยอัตโนมัติ (ในการติดตั้ง SQL Server ส่วนใหญ่) สำหรับบัญชีผู้ดูแลระบบ Windows เมื่อมีการติดตั้งฐานข้อมูล ในสถานการณ์ส่วนใหญ่ฉันใช้สิ่งนั้นเมื่อฉันจัดการฐานข้อมูล (มีสิทธิ์ทั้งหมด)
อย่างไรก็ตามหากคุณกำลังจะเข้าถึง SQL Server จากแอปพลิเคชันคุณจะต้องตั้งค่าเซิร์ฟเวอร์สำหรับ "โหมดผสม" (ทั้งการเข้าสู่ระบบ Windows และ SQL) และสร้างการเข้าสู่ระบบตามที่แสดงด้านบน จากนั้นคุณจะ "GRANT" สิทธิ์ในการเข้าสู่ระบบ SQL นั้นตามสิ่งที่จำเป็นสำหรับแอปของคุณ ดูที่นี่สำหรับข้อมูลเพิ่มเติม
UPDATE: แอรอนชี้ให้เห็นถึงการใช้ sp_addsrvrolemember เพื่อกำหนดบทบาทที่เตรียมไว้ให้กับบัญชีเข้าสู่ระบบของคุณ นี่เป็นความคิดที่ดี - เร็วและง่ายกว่าการให้สิทธิ์ด้วยตนเอง หากคุณใช้ Google คุณจะเห็นลิงก์มากมาย อย่างไรก็ตามคุณยังคงต้องเข้าใจความแตกต่างระหว่างการเข้าสู่ระบบและผู้ใช้
สิทธิ์ของผู้ดูแลระบบแบบเต็มสำหรับเซิร์ฟเวอร์ทั้งหมดหรือฐานข้อมูลเฉพาะ? ฉันคิดว่าคนอื่นตอบเรื่องฐานข้อมูล แต่สำหรับเซิร์ฟเวอร์:
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';
คุณอาจต้องปิดพารามิเตอร์ CHECK_ โดยขึ้นอยู่กับเวอร์ชันของ SQL Server Express ที่คุณใช้อยู่ ( การรวมข้อมูลนี้ในคำถามของคุณมีประโยชน์เกือบตลอดเวลา )
หากคุณต้องการสร้างสคริปต์ทั่วไปคุณสามารถทำได้ด้วยคำสั่ง Execute พร้อมกับแทนที่ด้วยชื่อผู้ใช้และชื่อฐานข้อมูลของคุณ
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)
คุณสามารถใช้ได้:
CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO
เพื่อสร้างล็อกอิน (ดูรายละเอียดเพิ่มเติมที่นี่ )
จากนั้นคุณอาจต้องใช้:
CREATE USER user_name
ในการสร้างผู้ใช้ที่เชื่อมโยงกับการเข้าสู่ระบบสำหรับฐานข้อมูลเฉพาะที่คุณต้องการให้พวกเขาเข้าถึงด้วย
(ดูรายละเอียดที่นี่ )
คุณยังสามารถใช้:
GRANT permission [ ,...n ] ON SCHEMA :: schema_name
เพื่อตั้งค่าสิทธิ์สำหรับสคีมาที่คุณกำหนดให้กับผู้ใช้
(ดูรายละเอียดที่นี่ )
คำสั่งอื่น ๆ อีกสองคำที่คุณอาจพบว่ามีประโยชน์คือแก้ไขผู้ใช้และแก้ไขการเข้าสู่ระบบ
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
สัปดาห์ที่ผ่านมาฉันได้ติดตั้ง Microsoft SQL Server 2014 Developer Edition ในกล่อง dev ของฉันและพบปัญหาที่ฉันไม่เคยเห็นมาก่อนในทันที
ฉันได้ติดตั้ง SQL Server เวอร์ชันต่างๆนับครั้งไม่ถ้วนและโดยปกติจะเป็นขั้นตอนที่ไม่เจ็บปวด ติดตั้งเซิร์ฟเวอร์เรียกใช้คอนโซลการจัดการมันง่ายมาก อย่างไรก็ตามหลังจากเสร็จสิ้นการติดตั้งนี้เมื่อฉันพยายามเข้าสู่เซิร์ฟเวอร์โดยใช้ SSMS ฉันได้รับข้อผิดพลาดเช่นเดียวกับด้านล่าง:
ข้อผิดพลาดในการเข้าสู่ระบบ SQL Server 18456“ การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้… (Microsoft SQL Server ข้อผิดพลาด: 18456)” ฉันเคยเห็นข้อผิดพลาดนี้หากพิมพ์รหัสผ่านผิดเมื่อเข้าสู่ระบบ - แต่นั่นก็ต่อเมื่อฉันใช้โหมดผสม ( Windows และ SQL Authentication) ในกรณีนี้เซิร์ฟเวอร์ได้รับการตั้งค่าด้วย Windows Authentication เท่านั้นและบัญชีผู้ใช้เป็นของฉันเอง ฉันยังไม่แน่ใจว่าเหตุใดจึงไม่เพิ่มผู้ใช้ของฉันในบทบาท SYSADMIN ระหว่างการตั้งค่า บางทีฉันอาจพลาดขั้นตอนและลืมเพิ่มเข้าไป ไม่ว่าอย่างไรก็ตามความหวังทั้งหมดไม่ได้สูญเสียไป
วิธีแก้ไขปัญหานี้หากคุณไม่สามารถเข้าสู่ระบบด้วยบัญชีอื่นไปยัง SQL Server ได้คือการเพิ่มการเข้าสู่ระบบเครือข่ายของคุณผ่านอินเทอร์เฟซบรรทัดคำสั่ง เพื่อให้ใช้งานได้คุณต้องเป็นผู้ดูแลระบบบน Windows สำหรับพีซีที่คุณเข้าสู่ระบบ
หยุดบริการ MSSQL เปิด Command Prompt โดยใช้ Run As Administrator เปลี่ยนเป็นโฟลเดอร์ที่เก็บไฟล์ 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
สร้างการเข้าสู่ระบบ [domainName \ loginName] จาก WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 GO ใช้ CTRL + C เพื่อสิ้นสุดทั้งสองกระบวนการในหน้าต่างพร้อมรับคำสั่ง คุณจะได้รับแจ้งให้กด Y เพื่อสิ้นสุดกระบวนการ SQL Server
เริ่มบริการ MSSQL ใหม่ แค่นั้นแหละ! ตอนนี้คุณควรจะสามารถเข้าสู่ระบบโดยใช้การเข้าสู่ระบบเครือข่ายของคุณ