È possibile avere un solo amministratore a livello di server. È possibile creare il numero di accessi e utenti che desideri, ma è necessario concedere l'accesso ai singoli database separatamente. È possibile reimpostare la password per l'amministratore a livello di server tramite il portale azzurro.
Non esiste un ruolo del server nel database SQL di Azure che garantisce l'accesso a tutti i database. dbmanager
consente di creare database, loginmanager
consente di creare accessi, ma il login principale a livello di server deve essere utilizzato per concedere l'accesso ai singoli database.
Per creare un nuovo utente e dare dbo diritti di uno o più database:
-- 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';
E sì, è cadere gli utenti nello stesso modo si farebbe in on-premise sql.
Se si voleva fare un nuovo utente come dbo su tutti i database sul server è possibile utilizzare un po 'di PowerShell per rendere la vita più facile:
$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"; `
}
Non funziona. Non vedo nessuno dei [dbo].*** tabelle nel mio database non master e quando provo a creare una tabella nel database non master, viene visualizzato un errore come "CREATE TABLE permesso negato nel database" master ". (nonostante il messaggio NON sto provando per rendere la tabella nel database master ...) – DeepSpace101
Credo non ci sia alcun ruolo del server nel database SQL di Azure che garantisce l'accesso a tutti i database. 'dbmanager' consente di creare database,' loginmanager' consente di creare accessi, ma il login principale a livello di server deve essere utilizzato per concedere l'accesso a singoli database. – Rory