azure sql 连接字符串-用户身份验证不是管理员

azuresql connection string-user auth not admin

sql azuredb 的样板连接字符串使用服务器的管理员 username/pwd。使用包含的数据库,用户可以登录到特定的数据库,而无需服务器登录访问权限。

我可以将数据库的连接字符串设置为 db 用户,而不必使用服务器的管理员用户吗?我正在使用 connstring 作为 azure 函数从数据库中获取数据。此外,用户没有活动目录帐户。

非常感谢您的帮助

如果想在Azure函数中使用非admin用户连接AzureSQL,可以使用下面的连接字符串

Server=tcp:<sql server name>.database.windows.net,1433;
Initial Catalog=<databse name>;Persist Security Info=False;
User ID=<the non-adimn user name>;
Password=<passsword>;
MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

例如

  1. 使用 SSMS 为您需要的数据库创建非管理员用户
 CREATE USER jim WITH PASSWORD = '<strong_password>'
 ALTER ROLE db_owner ADD MEMBER jim;
  1. 代码。我使用 System.Data.SqlClient 4.6.1 连接 Azure sql in Azure function
public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            var constr = "Server=tcp:<sql server name>.database.windows.net,1433;Initial Catalog=<databse name>;Persist Security Info=False;User ID=<the non-adimn user name>;Password=<passsword>;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";
            using (SqlConnection connection = new SqlConnection(constr))
            {
                var sql = "SELECT * FROM StarWars";
                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    connection.Open();
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            log.LogInformation(reader.GetString(2));
                        }
                    }
                }


            }

...

}


更新

如果您想使用非管理员用户连接 Azure SQL,请更改连接字符串中的 User ID 值,然后在应用程序设置中保存

  1. 配置连接字符串
Server=tcp:<sql server name>.database.windows.net,1433;
Initial Catalog=<databse name>;Persist Security Info=False;
User ID=<the non-adimn user name>;
Password=<passsword>;
MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
  1. 在应用程序设置中保存

  2. 用代码获取

如果要限制对 SQL 数据库的访问,您还可以向函数应用程序授予托管标识,并在 Sql 数据库中授予对其的访问权限。这样,只有您的函数才能连接,并且没有连接字符串泄露的风险。

这里有一些很好的例子来说明如何做到这一点:

https://www.azurecorner.com/using-managed-service-identity-in-azure-functions-to-access-azure-sql-database/

https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi