आप केवल एक ही सर्वर-स्तर व्यवस्थापक हो सकता है। आप जितना चाहें उतने अन्य लॉगिन और उपयोगकर्ता बना सकते हैं लेकिन उन्हें अलग-अलग डेटाबेस तक अलग-अलग पहुंच प्रदान करने की आवश्यकता है। आप एज़ूर पोर्टल के माध्यम से सर्वर-स्तरीय व्यवस्थापक के लिए पासवर्ड रीसेट कर सकते हैं।
Azure SQL डेटाबेस में कोई सर्वर भूमिका नहीं है जो सभी डेटाबेस तक पहुंच प्रदान करती है। dbmanager
आपको डेटाबेस बनाने देता है, loginmanager
आपको लॉग इन बनाने देता है, लेकिन सर्वर-स्तर के प्रिंसिपल लॉगिन का उपयोग अलग-अलग डेटाबेस तक पहुंच प्रदान करने के लिए किया जाना चाहिए।
एक नया उपयोगकर्ता बनाने के लिए और एक या अधिक डेटाबेस के लिए dbo अधिकार दे:
-- in master
create login [XXXX] with password = 'YYYYY'
create user [XXXX] from login [XXXX];
-- if you want the user to be able to create databases and logins
exec sp_addRoleMember 'dbmanager', 'XXXX';
exec sp_addRoleMember 'loginmanager', 'XXXX'
-- in each individual database, to grant dbo
create user [XXXX] from login [XXXX];
exec sp_addRoleMember 'db_owner', 'XXXX';
और हाँ, आप उसी तरह आप ऑन-प्रिमाइसेस एसक्यूएल में होगा में उन छोड़ देते हैं।
आप एक सर्वर पर सभी डेटाबेस पर dbo के रूप में एक नया उपयोगकर्ता बनाने के लिए आप एक छोटे से powershell उपयोग कर सकते हैं आपके जीवन को आसान बनाना चाहते थे, तो:
$newSqlUser = 'YOUR_NEW_LOGIN_HERE';
$serverName = 'YOUR-SERVER-NAME.database.windows.net'
$sqlAdminLogin = 'YOUR-ADMIN-SQL-LOGIN'
$createAdminUser = $TRUE;
# generate a nice long random password
Add-Type -Assembly System.Web
$newSqlPassword = [Web.Security.Membership]::GeneratePassword(25,3) -Replace '[%&+=;:/]', "!";
# prompt for your server admin password.
# Don't need the username param here but can be nice to avoid retyping
$sqlCreds = get-Credential -Username $sqlAdminLogin -Message 'Enter admin sql credentials'
# Create login and user in master db
$sql = "create login [$newSqlUser] with password = '$newSqlPassword'; create user [$newSqlUser] from login [$newSqlUser];"
invoke-sqlcmd -Query $sql -ServerInstance $serverName -Database 'master' -Username $sqlCreds.UserName -Password ($sqlCreds.GetNetworkCredential().Password)
"new login: $newSqlUser"
"password: $newSqlPassword"
# sql to create user in each db
if ($createAdminUser) { `
$createUserSql = "create user [$newSqlUser] from login [$newSqlUser]; exec sp_addRoleMember 'db_owner', '$newSqlUser'; "; `
} else { `
$createUserSql = "create user [$newSqlUser] from login [$newSqlUser]; exec sp_addRoleMember 'db_datareader', '$newSqlUser'; exec sp_addRoleMember 'db_denydatawriter', '$newSqlUser';"; `
}
# can't have multiple Invoke-SQLCmd in a pipeline so get the dbnames first, then iterate
$sql = "select name from sys.databases where name <> 'master';"
$dbNames = @()
invoke-sqlcmd -Query $sql -ServerInstance $serverName -Database 'master' -Username $sqlCreds.UserName -Password ($sqlCreds.GetNetworkCredential().Password) | `
foreach { $dbNames += $_.name }
# iterate over the dbs and add user to each one
foreach ($db in $dbNames) { `
invoke-sqlcmd -Query $createUserSql -ServerInstance $serverName -Database $db -Username ($sqlCreds.UserName) -Password $($sqlCreds.GetNetworkCredential().Password); `
"created user in $db database"; `
}
काम नहीं करता है। मुझे इनमें से कोई भी [डीबीओ] नहीं दिख रहा है।*** गैर-मास्टर डेटाबेस में टेबल और गैर-मास्टर डेटाबेस में कोई तालिका बनाने का प्रयास करते समय, मुझे 'डेटाबेस' मास्टर 'में तालिका अनुमति अस्वीकार करने जैसी त्रुटि मिलती है।' (संदेश के बावजूद मैं कोशिश नहीं कर रहा हूं मास्टर डेटाबेस में तालिका बनाने के लिए ...) – DeepSpace101
मेरा मानना है कि Azure SQL डेटाबेस में कोई सर्वर भूमिका नहीं है जो सभी डेटाबेस तक पहुंच प्रदान करती है। 'dbmanager' आपको डेटाबेस बनाने देता है,' loginmanager' आपको लॉग इन बनाने देता है, लेकिन सर्वर-स्तर के प्रिंसिपल लॉगिन का उपयोग अलग-अलग डेटाबेस तक पहुंच प्रदान करने के लिए किया जाना चाहिए। – Rory