2012-11-18 4 views
9

Devo sostituire il mio vecchio login/utente amministratore con uno nuovo. Ho provato quanto segue:Creare un nuovo accesso di livello amministratore in SQL di Azure?

CREATE LOGIN newDbAdmin WITH password='123isTheBestPasswordEver' 
CREATE USER newDbAdmin 

Con questo sono poi anche in grado di accedere al Azure SQL tramite Microsoft SQL Server Management Studio. Tuttavia non sembra essere un login di livello admin + utente. Non riesco a creare tabelle e poche altre cose che gli amministratori possono fare. Sospetto di dover concedere autorizzazioni a determinati schemi (dbo?) O qualcosa del genere ...

Quindi, qual è il modo giusto per creare l'accesso utente + su SQL di Azure con lo stesso livello di privilegi dell'amministratore originale (creato quando creo il DB tramite il sito portale di Azure).

In una nota correlata, Suppongo che il modo corretto di smaltire il vecchio login è:

DROP USER oldAdmin 
DROP LOGIN oldAdmin 

?

risposta

0

appena creato un login e una corrispondente utente, è necessario aggiungere le appartenenze ai ruoli appropriati ...

esempio,

EXEC sp_addrolemember 'DBManager', 'login1User';

EXEC sp_addrolemember 'loginmanager', 'login1User';

vedere: https://azure.microsoft.com/documentation/articles/sql-database-manage-logins/

+4

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

+0

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

13

È 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"; ` 
} 
1

È possibile utilizzare Azure AD per gestire il server. Crea un gruppo DBA: assegna tutti i DBA a quel gruppo. Quindi assegnare il gruppo come AD Manager per il server, che consente di disporre di più DBA

Chiunque in quel gruppo avrà l'autorizzazione DBA completa sul server.

https://docs.microsoft.com/en-gb/azure/sql-database/sql-database-aad-authentication

Idealmente, penso che si aspettano di utilizzare il livello di dB contenuta utenti concessi da un DBA. Per noi, avevamo bisogno di più amministratori dato che disponevamo di molti database.