2012-11-18 13 views
9

Tôi cần phải thay thế đăng nhập/người dùng quản trị cũ của mình bằng mật khẩu mới. Tôi đã thử các cách sau:Tạo đăng nhập cấp quản trị viên mới trong Azure SQL?

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

Với điều này tôi cũng có thể đăng nhập vào Azure SQL qua Microsoft SQL Server Management Studio. Tuy nhiên nó không có vẻ là một người quản trị đăng nhập cấp + người dùng. Tôi không thể tạo bảng và một số thứ khác mà quản trị viên có thể thực hiện. Tôi nghi ngờ tôi cần phải cấp quyền truy cập vào các lược đồ nhất định (dbo?) Hoặc một số thứ dọc theo các dòng đó ...

Vì vậy, cách đúng để tạo người dùng + đăng nhập trên Azure SQL với cùng mức độ đặc quyền như quản trị viên ban đầu (được tạo khi tôi tạo DB thông qua trang cổng thông tin Azure).

Trên một lưu ý liên quan, tôi giả sử một cách thích hợp để xử lý ngoài khơi đăng nhập cũ là:

DROP USER oldAdmin 
DROP LOGIN oldAdmin 

?

Trả lời

0

bạn vừa tạo một tên đăng nhập và sử dụng tương ứng, bạn phải thêm các thành viên vai trò thích hợp ...

ví dụ

EXEC sp_addrolemember 'dbmanager', 'login1User';

EXEC sp_addrolemember 'loginmanager', 'login1User';

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

+4

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

+0

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

13

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

Bạn có thể sử dụng Azure AD để quản lý máy chủ. Tạo một nhóm DBA - gán tất cả các DBA cho nhóm đó. Sau đó, chỉ định nhóm làm Trình quản lý quảng cáo cho máy chủ - cho phép bạn có nhiều DBA

Bất kỳ ai trong nhóm đó sẽ có quyền DBA đầy đủ trên máy chủ.

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

Lý tưởng nhất, tôi nghĩ rằng họ mong đợi bạn sử dụng mức DB chứa người dùng do một DBA. Đối với chúng tôi, chúng tôi cần nhiều quản trị viên vì chúng tôi có rất nhiều cơ sở dữ liệu.