powershell 使用Read-SqlTableData读取AzSQL表时使用Azure AD帐户进行身份验证

3pmvbmvn  于 2023-04-30  发布在  Shell
关注(0)|答案(3)|浏览(130)

使用AzAD帐户连接AzSQL时,还需要向ConnectionContext添加哪些其他属性?

$srv = new-object ('Microsoft.SqlServer.Management.Smo.Server') "<>.database.windows.net"
$srv.ConnectionContext.LoginSecure = $false
$srv.ConnectionContext.Authentication = [Microsoft.SqlServer.Management.Common.SqlConnectionInfo+AuthenticationMethod]::ActiveDirectoryPassword
$srv.ConnectionContext.Login = "<>@<>.onmicrosoft.com"
$srv.ConnectionContext.Password = "<>"
$srv.ConnectionContext.Connect()

错误MethodInvocationException: Exception calling "Connect" with "0" argument(s): "Failed to connect to server <>.database.windows.net."

ActiveDirectoryPassword method在SSMS中运行良好。我尝试运行Read-SqlTableData而不是调用TSQL查询。

Read-SqlTableData -InputObject $srv.Databases["TestDB"].Tables["TestTable"] -TopN 5

预期屏幕截图或屏幕截图GIF,答案代码适用于使用Read-SqlTableData的AzSQL上的AzAD用户ID。

ou6hu8tu

ou6hu8tu1#

正如前面所讨论的,这只是因为Read-SqlTableData尚未更新以支持-AccessToken参数。
我已经收到了一些其他cmdlet的请求。所以我会尽快拿到

hiz5n14c

hiz5n14c2#

请确保以管理员身份登录。用户必须具有azure广告管理员角色才能连接服务器。
并确保用户具有Azure PortalIAM访问控制的目录读取器角色
还要确保您已经为SQL Server分配了AAD管理员。尝试在azure ad中创建服务主体(如果尚未存在),然后给予db_reader或db_writer或db_owner权限。

CREATE USER [user or msi] FROM EXTERNAL PROVIDER;

ALTER ROLE [db_datareader] ADD MEMBER <Azure_AD_principal_name>  --Grant the user db_datareader permissions on that database
GO

或写入权限(如果需要)

ALTER ROLE [db_datawriter] ADD MEMBER <Azure_AD_principal_name>;

或所有者许可(如果需要)

ALTER ROLE [db_owner] ADD MEMBER <Azure_AD_principal_name>

Create Azure AD users in azure sql DB using service principals - Azure SQL Database | Microsoft Docs
请查看以下参考:

  1. Adding a new user with specific permissions to an Azure Sql Database using Active Directory Integrated Authentication - Stack Overflow
  2. Connect an Azure App Registration to Azure SQL Database via Powershell - Stack Overflow
fhity93d

fhity93d3#

AccessToken参数已添加到SqlServer Module22.0.59版本中的cmdlet中。

Read-SqlTableData -AccessToken (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token `
-ServerInstance <>.database.windows.net -SchemaName dbo -DatabaseName <> -TableName <> -TopN 3 |FT

输出

相关问题