एक नया उपयोगकर्ता बनाने के लिए SQL सर्वर स्क्रिप्ट


98

मैं SQL सर्वर एक्सप्रेस में adminउपयोगकर्ता ( abcdपासवर्ड के साथ ) बनाने के लिए एक स्क्रिप्ट लिखना चाहता हूं । इसके अलावा, मैं इस उपयोगकर्ता को adminपूर्ण अधिकार प्रदान करना चाहता हूं ।

जवाबों:


196

आपके प्रश्न के आधार पर, मुझे लगता है कि आप उपयोगकर्ता और लॉगिन के बीच के अंतर के बारे में थोड़ा भ्रमित हो सकते हैं । एक लॉग इन किसी सर्वर में लॉग इन करने में सक्षम है और जो एक पासवर्ड है जो - एक पूरे के रूप एसक्यूएल सर्वर पर एक खाता है। एक उपयोगकर्ता एक विशिष्ट डेटाबेस तक पहुंच के साथ एक लॉगिन है

लॉगिन बनाना आसान है और एक विशिष्ट डेटाबेस में लॉगिन के लिए उपयोगकर्ता खाता बनाने से पहले (जाहिर है) किया जाना चाहिए :

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 सर्वर स्थापनाओं में) बनाया जाता है। ज्यादातर स्थितियों में, मैं बस उस का उपयोग करता हूं जब मैं एक डेटाबेस का प्रशासन कर रहा हूं (इसमें सभी विशेषाधिकार हैं)।

हालाँकि, यदि आप किसी एप्लिकेशन से SQL सर्वर एक्सेस करने जा रहे हैं, तो आप सर्वर को "मिश्रित मोड" (विंडोज और SQL लॉगिन दोनों) के लिए सेट करना चाहेंगे और जैसा कि ऊपर दिखाया गया है, एक लॉगिन बनाएँ। फिर आप अपने एप्लिकेशन के लिए जो आवश्यक है, उस SQL ​​लॉगिन पर आधारित "GRANT" को निजीकृत करते हैं। अधिक जानकारी के लिए यहाँ देखें ।

अद्यतन: हारून अपने लॉगिन खाते में तैयार भूमिका को असाइन करने के लिए sp_addsrvrolemember के उपयोग को इंगित करता है। यह एक अच्छा विचार है - मैन्युअल रूप से विशेषाधिकार देने की तुलना में तेज और आसान। यदि आप इसे Google करते हैं तो आपको बहुत सारे लिंक दिखाई देंगे। हालाँकि, आपको अभी भी एक लॉगिन और एक उपयोगकर्ता के बीच के अंतर को समझना होगा।


1
वास्तव में मुझे जो चाहिए, धन्यवाद। मुझे उम्मीद नहीं थी कि यह इतना आसान होगा - और इसके लिए पूरी तरह से काम करने के लिए !!
डेव

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 सर्वर एक्सप्रेस का आप किस संस्करण का उपयोग कर रहे हैं, इसके आधार पर आपको CHECK_ मापदंडों को छोड़ना पड़ सकता है (यह आपके प्रश्न में इस जानकारी को शामिल करने के लिए लगभग हमेशा उपयोगी होता है)।


बिल्कुल वही जो मैं चाहता हूं कि मैं Microsoft.SqlServer.Management.Smo.Login वर्ग का उपयोग करके c # के साथ लॉगिन बनाने की कोशिश कर रहा था। लेकिन मैं नहीं बना सका। यह सी # धन्यवाद में सरल कोड के साथ काम करता है
कोर्डिसेप करता है

6

यदि आप एक सामान्य स्क्रिप्ट बनाना चाहते हैं, तो आप इसे अपने उपयोगकर्ता नाम और डेटाबेस के नाम के साथ एक एग्जिक्यूट स्टेटमेंट के साथ कर सकते हैं

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)

मैंने अनायास ही इस उत्तर को अस्वीकार कर दिया है, लेकिन अब मैं संपादन के बिना अपने पतन को पूर्ववत नहीं कर सकता। मैंने अपना डाउनवोट हटाने के लिए जंक टेक्स्ट डाला है, लेकिन अब मैं न तो जंक टेक्स्ट हटा सकता हूं और न ही
डाउनवोट

4

आप उपयोग कर सकते हैं:

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

लॉगिन बनाने के लिए ( अधिक जानकारी के लिए यहां देखें )।

तब आपको उपयोग करने की आवश्यकता हो सकती है:

CREATE USER user_name 

विशिष्ट डेटाबेस के लिए लॉगिन से जुड़े उपयोगकर्ता बनाने के लिए आप उन्हें एक्सेस देना चाहते हैं।

( विवरण के लिए यहां देखें)

आप भी उपयोग कर सकते हैं:

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

स्कीमा की अनुमतियाँ सेट करने के लिए जिन्हें आपने उपयोगकर्ताओं को सौंपा है।

( विवरण के लिए यहां देखें)

दो अन्य आदेश जो आपको उपयोगी लग सकते हैं, वे हैं USER और ALTER 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 डेवलपर संस्करण स्थापित किया, और तुरंत एक समस्या में भाग गया जिसे मैंने पहले कभी नहीं देखा था।

मैंने SQL सर्वर के विभिन्न संस्करणों को अनगिनत बार स्थापित किया है, और यह आमतौर पर एक दर्द रहित प्रक्रिया है। सर्वर स्थापित करें, प्रबंधन कंसोल चलाएँ, यह इतना आसान है। हालाँकि, इस इंस्टॉलेशन को पूरा करने के बाद, जब मैंने SSMS का उपयोग करके सर्वर में लॉग इन करने की कोशिश की, तो मुझे नीचे की तरह एक त्रुटि मिली:

SQL सर्वर लॉगिन त्रुटि 18456 "लॉगिन उपयोगकर्ता के लिए विफल रहा ... (Microsoft SQL सर्वर, त्रुटि: 18456)" मुझे यह त्रुटि देखने के लिए उपयोग किया जाता है यदि मैंने लॉगिन करते समय गलत पासवर्ड टाइप किया था - लेकिन यह केवल तभी है जब मैं मिश्रित मोड का उपयोग कर रहा हूं ( Windows और SQL प्रमाणीकरण)। इस स्थिति में, सर्वर केवल Windows प्रमाणीकरण के साथ सेट किया गया था, और उपयोगकर्ता खाता मेरा खुद का था। मुझे अब भी यकीन नहीं है कि इसने सेटअप के दौरान मेरे उपयोगकर्ता को SYSADMIN भूमिका में क्यों नहीं जोड़ा; शायद मैं एक कदम चूक गया और इसे जोड़ना भूल गया। किसी भी दर पर, सभी आशा नहीं खो गई थी।

इसे ठीक करने का तरीका, यदि आप किसी अन्य खाते के साथ SQL सर्वर पर लॉग इन नहीं कर सकते हैं, तो कमांड लाइन इंटरफेस के माध्यम से अपना नेटवर्क लॉगिन जोड़ना है। इस कार्य के लिए, आपको उस पीसी के लिए विंडोज पर एक प्रशासक होना चाहिए जिसे आपने लॉग ऑन किया है।

MSSQL सेवा बंद करें। रन कमांड एडमिनिस्ट्रेटर का उपयोग करके एक कमांड प्रॉम्प्ट खोलें। SQL सर्वर EXE फ़ाइल रखने वाले फ़ोल्डर में बदलें; SQL सर्वर 2014 के लिए डिफ़ॉल्ट "C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn" है। निम्न आदेश चलाएँ: "sqlservr.exe -m"। यह SQL सर्वर को एकल-उपयोगकर्ता मोड में प्रारंभ करेगा। इस कमांड प्रॉम्प्ट को खुला छोड़ते समय, एक और एक खोलें, चरण 2 और 3 को दोहराएं। दूसरी कमांड प्रॉम्प्ट विंडो में, "SQLCMD –S Server_Name \ Instance_Name" चलाएं। इस विंडो में, निम्न पंक्तियों को चलाएं, प्रत्येक के बाद एंटर दबाएं: 1

कमांड लॉग इन करें [DOMName \ loginName] विन्डोज़ 2 से 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 कमांड प्रॉम्प्ट विंडो में दोनों प्रक्रियाओं को समाप्त करने के लिए CTRL + C का उपयोग करें; आपको SQL सर्वर प्रक्रिया को समाप्त करने के लिए Y दबाने के लिए प्रेरित किया जाएगा।

MSSQL सेवा को पुनरारंभ करें। बस! अब आपको अपने नेटवर्क लॉगिन का उपयोग करके लॉग इन करने में सक्षम होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.