SQL Server Script untuk membuat pengguna baru

105

Saya ingin menulis skrip untuk membuat adminpengguna (dengan abcdsandi) di SQL Server Express. Saya juga ingin memberikan adminhak penuh kepada pengguna ini .

Ashish Ashu
sumber

Jawaban:

205

Berdasarkan pertanyaan Anda, saya rasa Anda mungkin sedikit bingung tentang perbedaan antara Pengguna dan Login . A Login adalah akun di SQL Server secara keseluruhan - seseorang yang dapat masuk ke server dan memiliki kata sandi. Sebuah Pengguna adalah Login dengan akses ke database tertentu.

Membuat Login itu mudah dan harus (jelas) dilakukan sebelum membuat akun Pengguna untuk login di database tertentu:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Berikut adalah cara Anda membuat Pengguna dengan hak istimewa db_owner menggunakan Login yang baru saja Anda nyatakan:

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

Sekarang, Login sedikit lebih lancar daripada yang saya buat di atas. Misalnya, akun Login secara otomatis dibuat (di sebagian besar penginstalan SQL Server) untuk akun Administrator Windows saat database diinstal. Dalam kebanyakan situasi, saya hanya menggunakannya ketika saya mengelola database (ia memiliki semua hak istimewa).

Namun, jika Anda akan mengakses SQL Server dari aplikasi, maka Anda perlu mengatur server untuk "Mode Campuran" (baik login Windows maupun SQL) dan membuat Login seperti yang ditunjukkan di atas. Anda kemudian akan mendapatkan hak istimewa "MEMBERIKAN" ke Login SQL tersebut berdasarkan apa yang diperlukan untuk aplikasi Anda. Lihat di sini untuk informasi lebih lanjut.

UPDATE: Aaron menunjukkan penggunaan sp_addsrvrolemember untuk menetapkan peran yang disiapkan ke akun login Anda. Ini ide yang bagus - lebih cepat dan lebih mudah daripada memberikan hak istimewa secara manual. Jika Anda mencari di Google, Anda akan melihat banyak tautan. Namun, Anda tetap harus memahami perbedaan antara login dan pengguna.

Mark Brittingham
sumber
1
Persis seperti yang saya butuhkan, terima kasih. Saya tidak menyangka akan begitu mudah - dan untuk bekerja dengan sempurna !!
Dave
34

Hak admin penuh untuk seluruh server, atau database tertentu? Saya pikir yang lain menjawab untuk database, tetapi untuk server:

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

Anda mungkin perlu meninggalkan parameter CHECK_ tergantung pada versi SQL Server Express yang Anda gunakan (hampir selalu berguna untuk menyertakan informasi ini dalam pertanyaan Anda).

Aaron Bertrand
sumber
Persis yang saya inginkan saya mencoba membuat login dengan c # menggunakan kelas Microsoft.SqlServer.Management.Smo.Login. tetapi saya tidak bisa membuat. ini bekerja dengan kode sederhana di c # thanks
kordiseps
6

Jika Anda ingin membuat skrip generik, Anda dapat melakukannya dengan pernyataan Execute dengan Replace with your username and database name

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)
Guish
sumber
Saya tidak sengaja memberikan suara negatif pada jawaban ini, tetapi sekarang saya tidak dapat membatalkan suara negatif saya tanpa mengedit. Saya telah meletakkan teks sampah hanya untuk menghapus suara negatif saya, tetapi sekarang saya tidak dapat menghapus teks sampah juga suara negatifnya ... Saya minta maaf
sblandin
4

Kamu bisa memakai:

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

Untuk membuat login (Lihat di sini untuk lebih jelasnya).

Maka Anda mungkin perlu menggunakan:

CREATE USER user_name 

Untuk membuat pengguna yang terkait dengan login untuk database tertentu, Anda juga ingin memberi mereka akses.

(Lihat di sini untuk detailnya)

Anda juga bisa menggunakan:

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

Untuk menyiapkan izin untuk skema yang Anda tetapkan pengguna.

(Lihat di sini untuk detailnya)

Dua perintah lain yang mungkin berguna bagi Anda adalah ALTER USER dan ALTER LOGIN .

Simon P Stevens
sumber
3
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

ini sepenuhnya membantu Anda untuk jaringan menggunakan:

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
Ali asghar Fendereski
sumber
0

Minggu terakhir ini saya menginstal Microsoft SQL Server 2014 Developer Edition di kotak dev saya, dan langsung mengalami masalah yang belum pernah saya lihat sebelumnya.

Saya telah menginstal berbagai versi SQL Server berkali-kali, dan ini biasanya merupakan prosedur yang tidak menyakitkan. Instal server, jalankan Konsol Manajemen, sesederhana itu. Namun, setelah menyelesaikan instalasi ini, ketika saya mencoba masuk ke server menggunakan SSMS, saya mendapat kesalahan seperti di bawah ini:

Kesalahan login SQL Server 18456 "Login gagal untuk pengguna ... (Microsoft SQL Server, Error: 18456)" Saya terbiasa melihat kesalahan ini jika saya mengetik kata sandi yang salah saat masuk - tapi itu hanya jika saya menggunakan mode campuran ( Otentikasi Windows dan SQL). Dalam kasus ini, server diatur hanya dengan Otentikasi Windows, dan akun pengguna adalah milik saya. Saya masih tidak yakin mengapa ia tidak menambahkan pengguna saya ke peran SYSADMIN selama penyiapan; mungkin saya melewatkan satu langkah dan lupa menambahkannya. Bagaimanapun, tidak semua harapan hilang.

Cara untuk memperbaikinya, jika Anda tidak dapat masuk dengan akun lain ke SQL Server, adalah dengan menambahkan login jaringan Anda melalui antarmuka baris perintah. Agar ini berfungsi, Anda harus menjadi Administrator di Windows untuk PC yang Anda masuki.

Hentikan layanan MSSQL. Buka Command Prompt menggunakan Run As Administrator. Ubah ke folder yang menyimpan file EXE SQL Server; default untuk SQL Server 2014 adalah "C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn". Jalankan perintah berikut: “sqlservr.exe –m”. Ini akan memulai SQL Server dalam mode pengguna tunggal. Sambil membiarkan Command Prompt ini terbuka, buka yang lain, ulangi langkah 2 dan 3. Di jendela Command Prompt kedua, jalankan "SQLCMD –S Server_Name \ Instance_Name" Di jendela ini, jalankan baris berikut, tekan Enter setelah masing-masing: 1

BUAT LOGIN [domainName \ loginName] DARI WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 GO Gunakan CTRL + C untuk mengakhiri kedua proses di jendela Command Prompt; Anda akan diminta untuk menekan Y untuk mengakhiri proses SQL Server.

Mulai ulang layanan MSSQL. Itu dia! Sekarang Anda seharusnya dapat masuk menggunakan login jaringan Anda.

Mohammad shahnawaz
sumber