Yeni bir kullanıcı oluşturmak için SQL Server Script


108

SQL Server Express'te bir adminkullanıcı ( abcdparolayla) oluşturmak için bir komut dosyası yazmak istiyorum . Ayrıca bu kullanıcıya admintüm hakları atamak istiyorum .

Yanıtlar:


209

Sorunuza dayanarak, bir Kullanıcı ile Giriş arasındaki fark konusunda kafanızın biraz karışabileceğini düşünüyorum . A Giriş sunucuya oturum açabilir ve kim bir şifre olan biri - bir bütün olarak, SQL Server üzerinde bir hesaptır. Bir kullanıcı bir olan Girişi belirli veritabanına erişimi olan.

Bir Oturum Açma oluşturmak kolaydır ve belirli bir veritabanında oturum açmak için bir Kullanıcı hesabı oluşturmadan önce (tabii ki) yapılmalıdır :

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Az önce belirttiğiniz Oturum Açma özelliğini kullanarak db_owner ayrıcalıklarına sahip bir Kullanıcıyı şu şekilde oluşturabilirsiniz :

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

Şimdi, Girişler yukarıda göründüğümden biraz daha akıcı. Örneğin, veritabanı kurulduğunda Windows Yönetici hesabı için otomatik olarak bir Oturum Açma hesabı oluşturulur (çoğu SQL Server kurulumunda). Çoğu durumda, bir veritabanını yönetirken bunu kullanırım (tüm ayrıcalıklara sahiptir).

Bununla birlikte, SQL Server'a bir uygulamadan erişecekseniz, sunucuyu "Karışık Mod" (hem Windows hem de SQL oturum açma işlemleri) için ayarlamak ve yukarıda gösterildiği gibi bir Oturum Açma oluşturmak isteyeceksiniz. Daha sonra, uygulamanız için neyin gerekli olduğuna bağlı olarak söz konusu SQL Oturum Açma işlemine "VERGİ" ayrıcalıkları vereceksiniz. Daha fazla bilgi için buraya bakın .

GÜNCELLEME: Aaron, oturum açma hesabınıza hazırlanmış bir rol atamak için sp_addsrvrolememberin kullanıldığını belirtir. Bu iyi bir fikirdir - ayrıcalıkları manuel olarak vermekten daha hızlı ve kolaydır. Eğer Google'da ararsanız çok sayıda bağlantı göreceksiniz. Ancak yine de bir oturum açma ile kullanıcı arasındaki farkı anlamanız gerekir.


1
Tam olarak istediğim şey, teşekkür ederim. Bu kadar kolay olmasını beklemiyordum - ve mükemmel çalışmasını beklemiyordum !!
Dave

34

Tüm sunucu veya belirli bir veritabanı için tam yönetici hakları mı? Sanırım diğerleri bir veritabanı için cevap verdi, ancak sunucu için:

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

Hangi SQL Server Express sürümünü kullandığınıza bağlı olarak CHECK_ parametrelerini bırakmanız gerekebilir ( bu bilgiyi sorunuza eklemek neredeyse her zaman yararlıdır).


Tam olarak istediğim şey Microsoft.SqlServer.Management.Smo.Login sınıfını kullanarak c # ile oturum açmaya çalışıyordum. ama yaratamadım. bu, c # te basit kodla çalışır
kordiseps

6

Genel bir komut dosyası oluşturmak istiyorsanız, bunu kullanıcı adınız ve veritabanı adınızla Değiştir içeren bir Execute ifadesiyle yapabilirsiniz.

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)

Bu yanıta istemeden olumsuz oy verdim ancak şimdi olumsuz oyumu düzenlemeden geri alamam. Sadece olumsuz oyumu kaldırmak için önemsiz metin koydum ama şimdi ne önemsiz metni ne de olumsuz oyu kaldıramıyorum ... Üzgünüm
Kasım'da

4

Kullanabilirsiniz:

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

Giriş oluşturmak için (Daha fazla ayrıntı için buraya bakın).

O zaman kullanmanız gerekebilir:

CREATE USER user_name 

Belirli bir veritabanı için oturum açma ile ilişkilendirilmiş kullanıcıyı oluşturmak için onlara da erişim izni vermek istiyorsunuz.

(Ayrıntılar için buraya bakın)

Ayrıca kullanabilirsin:

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

Kullanıcıları atadığınız şemalar için izinleri ayarlamak için.

(Ayrıntılar için buraya bakın)

Yararlı bulabileceğiniz diğer iki komut, ALTER USER ve ALTER LOGIN'dir .


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

bu, aşağıdakileri kullanarak ağ için size tam yardımcı olur:

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

Geçen hafta Microsoft SQL Server 2014 Developer Edition'ı geliştirici kutuma yükledim ve hemen daha önce hiç görmediğim bir sorunla karşılaştım.

Sayısız kez çeşitli SQL Server sürümlerini yükledim ve bu genellikle ağrısız bir prosedür. Sunucuyu kurun, Yönetim Konsolunu çalıştırın, bu kadar basit. Ancak bu kurulumu tamamladıktan sonra SSMS kullanarak sunucuya giriş yapmaya çalıştığımda aşağıdaki gibi bir hata aldım:

SQL Server oturum açma hatası 18456 "Kullanıcı için oturum açma başarısız oldu… (Microsoft SQL Server, Hata: 18456)" Oturum açarken yanlış parola yazarsam bu hatayı görmeye alışkınım - ancak bu yalnızca karma modu kullanıyorsam ( Windows ve SQL Kimlik Doğrulaması). Bu durumda, sunucu yalnızca Windows Kimlik Doğrulaması ile kuruldu ve kullanıcı hesabı bana aitti. Kurulum sırasında kullanıcımı SYSADMIN rolüne neden eklemediğinden hala emin değilim; belki bir adımı kaçırdım ve eklemeyi unuttum. Her halükarda, tüm umutlar yitirilmedi.

Bunu düzeltmenin yolu, SQL Server'da başka bir hesapla oturum açamıyorsanız, ağ oturum açma bilgilerinizi bir komut satırı arabirimi aracılığıyla eklemektir. Bunun çalışması için, oturum açtığınız bilgisayarda Windows'ta Yönetici olmanız gerekir.

MSSQL hizmetini durdurun. Yönetici Olarak Çalıştır'ı kullanarak bir Komut İstemi açın. SQL Server EXE dosyasını içeren klasöre geçin; SQL Server 2014 için varsayılan "C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn" şeklindedir. Şu komutu çalıştırın: “sqlservr.exe –m”. Bu, SQL Server'ı tek kullanıcı modunda başlatacaktır. Bu Komut İstemi açık bırakılırken, 2. ve 3. adımları tekrarlayarak başka bir Komut İstemi açın. İkinci Komut İstemi penceresinde, "SQLCMD –S Sunucu_Adı \ Örnek_Adı" komutunu çalıştırın Bu pencerede, her birinin ardından Enter tuşuna basarak aşağıdaki satırları çalıştırın: 1

WINDOWS 2 GO 3 SP_ADDSRVROLEMBER 'LOGIN_NAME', 'SYSADMIN' 4 GO'DAN GİRİŞ OLUŞTUR [domainName \ loginName] Komut İstemi pencerelerinde her iki işlemi de sonlandırmak için CTRL + C kullanın; SQL Server işlemini sonlandırmak için Y'ye basmanız istenecektir.

MSSQL hizmetini yeniden başlatın. Bu kadar! Artık ağ oturum açma bilgilerinizi kullanarak oturum açabilmelisiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.