मुझे सर्वर पर सभी 300 डेटाबेस तक एक नया लॉगिन पढ़ने की आवश्यकता है। उपयोगकर्ता मानचित्रण क्षेत्र में 300 चेकबॉक्स की जांच किए बिना मैं इसे कैसे पूरा कर सकता हूं?एसक्यूएल सर्वर - लॉग इन करने के लिए सभी डेटाबेस तक पहुंच कैसे पढ़ा जाए?
उत्तर
एसएसएमएस में क्वेरी मेनू पर "टेक्स्ट टू परिणाम" सेट करने का एक तरीका नीचे दिए गए निष्पादित करना होगा।
यह वास्तव में परिवर्तन नहीं करता है लेकिन समीक्षा और निष्पादन के लिए आपके लिए एक स्क्रिप्ट उत्पन्न करता है।
SET NOCOUNT ON;
DECLARE @user_name SYSNAME
, @login_name SYSNAME;
SELECT @user_name = 'user_name',
@login_name = 'login_name'
SELECT '
USE ' + QUOTENAME(NAME) + ';
CREATE USER ' + QUOTENAME(@user_name)
+ ' FOR LOGIN ' + QUOTENAME(@login_name)
+ ' WITH DEFAULT_SCHEMA=[dbo];
EXEC sys.sp_addrolemember
''db_datareader'',
''' + QUOTENAME(@user_name) + ''';
EXEC sys.sp_addrolemember
''db_denydatawriter'',
'''
+ QUOTENAME(@user_name) + ''';
GO
'
FROM sys.databases
WHERE database_id > 4
AND state_desc = 'ONLINE'
या आप आप पात्रों में से सभी को नहीं देख रहे हैं, तो जब आप इस चलाने के लिए, पाठ के लिए क्वेरी विकल्प खोलने और 'के लिए सेटिंग की जाँच sys.sp_MSforeachdb
as here या हारून बर्ट्रेंड के उन्नत संस्करण here
पर दिखाई दे सकता है प्रत्येक कॉलम में प्रदर्शित वर्णों की अधिकतम संख्या '। सुनिश्चित करें कि यह सभी वर्णों को प्रदर्शित करने के लिए पर्याप्त मूल्य पर सेट है।
डेटाबेस के माध्यम से कर्सर और प्रत्येक टी-एसक्यूएल के साथ प्रत्येक के लिए अनुदान पहुंच प्रदान करें।
मैंने नीचे दिए गए कोड का परीक्षण नहीं किया।
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb')
WHILE @@FETCH_STATUS = 0
BEGIN
GRANT SELECT ON DATABASE::@name to 'username';
FETCH NEXT FROM db_cursor INTO @name
END
उस बिंदु के बाद उपयोग करने के लिए टी-एसक्यूएल मेरा पॉइंट है भ्रम की टी। उस पर कोई संकेतक? – Greg
Declare @Databases Cursor
Declare @DbName as nvarchar(64)
Declare @Sql nvarchar(max)
Declare @BaseAddUserSql nvarchar(max)
Declare @BaseAddRoleSql nvarchar(max)
Set @Databases = Cursor Fast_Forward For
select [name]
from master..sysdatabases
where [name] not in('master','model','msdb','tempdb')
Open @Databases
Fetch Next From @Databases Into @DbName
Set @BaseAddUserSql = 'exec sp_adduser ''LOGINNAME'''
Set @BaseAddRoleSql = 'exec sp_addrolemember ''db_datareader'', ''LOGINNAME'''
While @@Fetch_Status = 0
Begin
Begin Try
Set @Sql = 'Use ' + Quotename(@DbName)
exec (@Sql)
Set @Sql = Replace(@BaseAddUserSql, 'LOGINNAME', <loginname>)
exec(@Sql)
Set @Sql = Replace(@BaseAddRoleSql, 'LOGINNAME', <loginname>)
exec(@Sql)
End Try
Begin Catch
End Catch
Fetch Next From @Databases Into @DbName
End
Close @Databases
Deallocate @Databases
यह कहता है कि यह सफलतापूर्वक पूरा हुआ लेकिन मुझे कोई बदलाव नहीं दिख रहा है। उपयोगकर्ता मैपिंग क्षेत्र नहीं बदला है। और लॉगिन जो मैंने
@ ग्रेग - आप फेंकने वाली त्रुटि को देखने के लिए Try-Catch ब्लॉक को टिप्पणी करना चाहेंगे। – Thomas
EXEC sp_MSForEachDB
'Declare @name varchar(100)
select @name = ''?''
PRINT @name
IF db_id(@name) > 4
BEGIN
USE ?
CREATE USER [user] FOR LOGIN [user];
EXEC sp_addrolemember ''db_datareader'', ''user''
END'
मैं मार्टिन स्मिथ के जवाब थोड़ा बदलाव करने के लिए किया था के रूप में:
- रिक्त स्थान और लाइनब्रेक नहीं सभी पाठ के परिणामस्वरूप ठीक से नहीं बनाया जा रहा
- Exec बयान में डाल में QUOTENAME स्क्वायर ब्रैकेट जो गलत है।
मेरे संस्करण:
SET NOCOUNT ON;
DECLARE @user_name SYSNAME
, @login_name SYSNAME;
SELECT @user_name = 'HelpdeskUser',
@login_name = 'Helpdesk'
SELECT 'USE ' + QUOTENAME(NAME) + ';
CREATE USER ' + QUOTENAME(@user_name)
+ ' FOR LOGIN ' + QUOTENAME(@login_name)
+ ' WITH DEFAULT_SCHEMA=[dbo];
EXEC sys.sp_addrolemember ''db_datareader'',''' + @user_name + ''';
EXEC sys.sp_addrolemember ''db_denydatawriter'', ''' + @user_name + ''';
GO'
FROM sys.databases
WHERE database_id > 4
AND state_desc = 'ONLINE'
अन्यथा पूरी तरह से काम करता है। धन्यवाद
मुझे बस ऐसे उपयोगकर्ता की आवश्यकता है जिसके पास डेटा रीडर अनुमति के साथ सभी डेटाबेस तक पहुंच होगी, इसलिए मैंने इस कोड का उपयोग किया: आपको क्वेरी btw से परिणाम चलाने की आवश्यकता होगी।
USE [master]
GO CREATE LOGIN [DOMAIN\USER] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO
select 'use ['+name+']
CREATE USER [DOMAIN\USER] FOR LOGIN [DOMAIN\USER]
EXEC sp_addrolemember N''db_datareader'', N''DOMAIN\USER''
'
from sys.databases
यदि आप सिस्टम डेटाबेस पर इसे लागू नहीं करना चाहते हैं तो बस जोड़ने जहां database_id> 6
आप इस तरह उदाहरण कर्सर के लिए उपयोग कर सकते हैं,:
USE master
GO
DECLARE @DatabaseName VARCHAR(32)
DECLARE @SQL NVARCHAR(max)
DECLARE @User VARCHAR(64)
SET @User = '[SQL\srvSSISAcc]' --Your User
DECLARE Grant_Permission CURSOR LOCAL FOR
SELECT name FROM MASTER.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb')
OPEN Grant_Permission
FETCH NEXT FROM Grant_Permission INTO @DatabaseName
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @SQL = 'USE '+ '[' + @DatabaseName + ']' +'; '+ 'CREATE USER ' + @User +
'FOR LOGIN ' + @User + '; EXEC sp_addrolemember N''db_datareader'',
' + @User + '; EXEC sp_addrolemember N''db_datawriter'', ' + @User + ''
EXEC sp_executesql @SQL
PRINT @SQL
FETCH NEXT FROM Grant_Permission INTO @DatabaseName
END
CLOSE Grant_Permission
DEALLOCATE Grant_Permission
अधिक इस विषय के बारे में मेरी पोस्ट में जानकारी मिली: http://www.pigeonsql.com/single-post/2016/12/23/Grant-User-Access-to-All-Databases
- 1. एसक्यूएल सर्वर डेटाबेस (0) db_owner डेटाबेस तक पहुंच
- 2. टी-एसक्यूएल लॉग इन
- 3. एसक्यूएल सर्वर - सभी मौजूदा और भविष्य डेटाबेस तक पहुंच पढ़ने के लिए लॉगिन अनुमति दें
- 4. डीबीयूजी के साथ डीजेगो एसक्यूएल प्रश्नों को लॉग इन करने के लिए लॉग इन
- 5. आईओएस 4 क्रैश लॉग कैसे पढ़ा जाए?
- 6. SQLite डेटाबेस से डेटा कैसे पढ़ा जाए?
- 7. NSAutoresizingMaskLayoutConstraint के लॉग आउटपुट को कैसे पढ़ा जाए?
- 8. एसक्यूएल रिपोर्टिंग सर्वर लॉग इन त्रुटियों के सभी स्थान कहां हैं?
- 9. लॉग फ़ाइलों के बजाय डेटाबेस पर लॉग इन करें
- 10. पूर्व के लिए लॉग इन एसक्यूएल को सीधे जोड़ने Azure
- 11. लॉग इन एनएचबीर्नेट एसक्यूएल प्रश्न
- 12. रुबी में नीचे से ऊपर तक फ़ाइल कैसे पढ़ा जाए?
- 13. विंडोज इवेंट लॉग में लॉग इन करने के लिए कब?
- 14. किसी भिन्न डेटाबेस में लॉगिन के लिए SQL सर्वर डेटाबेस मेल प्रक्रियाओं तक पहुंच कैसे प्राप्त करें?
- 15. केवल उपयोगकर्ताओं में लॉग इन के लिए छवि फ़ाइलों तक पहुंच प्रतिबंधित करें
- 16. एसक्यूएल सर्वर लॉग इन के लिए नोलॉक संकेत को कैसे बल दें
- 17. ऑब्जेक्ट तक पहुंच प्राप्त करने के लिए
- 18. एसक्यूएल सर्वर में मास्टर डेटाबेस संयोजन को कैसे बदला जाए?
- 19. requ.js: सभी लोड मॉड्यूल तक पहुंच
- 20. सभी लॉग इन ड्रॉप करें जहां
- 21. एसक्यूएल इंजेक्शन बनाने की कोशिश कर रहे किसी को लॉग इन करने के लिए कैसे करें
- 22. Android में सिस्टम लॉग फ़ाइल को कैसे पढ़ा जाए?
- 23. मॉडल उदाहरण के डेटाबेस तालिका नाम को कैसे पढ़ा जाए?
- 24. लॉग इन
- 25. टोरनेडो वेब सर्वर में stdout के अनुरोधों को लॉग इन करने के लिए कैसे?
- 26. टी-एसक्यूएल प्रतिलिपि लॉग इन, उपयोगकर्ता, भूमिकाएं, अनुमतियां इत्यादि
- 27. एसक्यूएल सर्वर तक पहुँच करने के लिए उपयोगकर्ता नाम और मशीन नाम पता लगाने के लिए कैसे
- 28. एसक्यूएल सर्वर (single_user) में डेटाबेस पुनर्स्थापित करने
- 29. एसक्यूएल सर्वर डेटाबेस
- 30. एक्सएमआई कैसे पढ़ा जाए?
मैं अभी इस sp_msforeachdb के बारे में क्यों सुन रहा हूं? मुझे लगता है कि मैं बस उन उपकरणों के साथ सबकुछ कोशिश कर रहा हूं जो मुझे पता है। खैर, मैं इसे टूलबॉक्स में जोड़ रहा हूं। धन्यवाद! – buckbova
धन्यवाद! यह काम करने लग रहा था। मेरे पास उस क्वेरी के परिणामों को टेक्स्टपैड में कॉपी किया गया था और \ nGo \ n – Greg
@ ग्रेग - ग्लेड ने काम किया था। क्या आपने इसे प्रबंधन स्टूडियो में चलाया था?यदि ऐसा है तो "टेक्स्ट टू परिणाम" (CTRL + T) विकल्प का चयन करने से शायद मध्यवर्ती चरण की आवश्यकता से बचा जा सकता है। –