c语言sscanf函数的用法是什么
415
2022-09-29
使用Service Principal访问数据库
说完managed identity,再来看下service principal,service principal其实类似于service account的概念,也是个用来给application用的ID,一般来说在应用程序里,如果用到的Azure资源比较多的话,比如blob,数据库,key vault等等,这种情况下其实可以统一把权限赋予service principal,然后通过service principal获取token,拿到访问这些资源的权限即可,这样便于统一授权管理
下边就来看下怎么给service principal授权访问Azure SQL数据库,首先需要参考下边的文章创建一个service principal,过程就不多介绍了,跑个命令就完事了
IDapplication IDapplication secret
有了SP和Azure SQL数据库之后,首先需要给Azure SQL添加一个AAD管理员,原因和过程都和之前使用managed identity访问数据库的时候一样
之后运行TSQL来创建db level的user,对应的其实就是service principal的名字
CREATE USER mxysp FROM EXTERNAL PROVIDER;ALTER ROLE db_datareader ADD MEMBER mxysp;ALTER ROLE db_datawriter ADD MEMBER mxysp;ALTER ROLE db_ddladmin ADD MEMBER mxysp;GO
这样就OK了,其实授权的过程非常简单,主要是如何来用service principal访问数据库,目前来说SSMS貌似应该是没办法直接用service principal进行登陆的,所以我们需要用一些其他方式获取到token,然后执行一些query
不同的语言其实可以利用不同的library实现这个功能,拿PowerShell举例的话,其实可以将CLI和SQLServer的module结合在一起
Install-Module -Name SqlServerImport-Module -Name SqlServer
然后用AZ CLI登陆下
az login --service-principal -u
之后可以直接来获取下token
$accessToken = az account get-access-token --resource --query "accessToken" --output tsv
之后准备下用来连接数据库的connection string,这里正好可以直接用上篇中managed identity用的
$connectionString = "Server=tcp:mxydemo.database.windows.net,1433;Initial Catalog=demo;Persist Security Info=False;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;"
接下来开始创建连接
$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)$connection.AccessToken = $accessToken
万事具备,接下来就可以开始跑些query试试看了
$connection.Open()$CmdText='select * from dbo.Todo'$svrConnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($connection)$server = New-Object Microsoft.SqlServer.Management.Smo.Server($svrConnection)$result=$server.ConnectionContext.ExecuteWithResults($CmdText)$result.Tables
可以看到query跑成功了
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~