Bạn chỉ có thể có một quản trị viên cấp máy chủ. Bạn có thể tạo bao nhiêu thông tin đăng nhập và người dùng khác theo ý muốn nhưng họ cần được cấp quyền truy cập vào từng cơ sở dữ liệu riêng lẻ. Bạn có thể đặt lại mật khẩu cho quản trị viên cấp máy chủ qua cổng thông tin.
Không có vai trò máy chủ trong Cơ sở dữ liệu SQL Azure cấp quyền truy cập vào tất cả cơ sở dữ liệu. dbmanager
cho phép bạn tạo cơ sở dữ liệu, loginmanager
cho phép bạn tạo thông tin đăng nhập, nhưng đăng nhập chính cấp máy chủ phải được sử dụng để cấp quyền truy cập vào cơ sở dữ liệu riêng lẻ.
Để tạo một người dùng mới và cung cấp cho dbo quyền cho một hoặc nhiều cơ sở dữ liệu:
-- 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';
Và vâng, bạn thả người dùng trong cùng một cách bạn sẽ ở tại chỗ sql.
Nếu bạn muốn làm cho một người dùng mới như dbo trên tất cả các cơ sở dữ liệu trên máy chủ, bạn có thể sử dụng một chút PowerShell để làm cho cuộc sống của bạn dễ dàng hơn:
$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"; `
}
Không hoạt động. Tôi không thấy bất kỳ [dbo] nào.*** bảng trong cơ sở dữ liệu không chính của tôi và khi cố gắng tạo một bảng trong cơ sở dữ liệu không chính, tôi nhận được một lỗi như 'CREATE TABLE quyền bị từ chối trong cơ sở dữ liệu 'master'.' (mặc dù tin nhắn tôi không cố gắng để tạo bảng trong cơ sở dữ liệu chính ...) – DeepSpace101
Tôi tin rằng không có vai trò máy chủ trong Cơ sở dữ liệu Azure SQL cấp quyền truy cập vào tất cả các cơ sở dữ liệu. 'dbmanager' cho phép bạn tạo cơ sở dữ liệu,' loginmanager' cho phép bạn tạo thông tin đăng nhập, nhưng đăng nhập chính cấp máy chủ phải được sử dụng để cấp quyền truy cập cho các cơ sở dữ liệu riêng lẻ. – Rory