PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Nhận Mã thông báo truy cập cho kết nối với PostgreSQL trong Azure Functions

Nếu bạn muốn kết nối cơ sở dữ liệu Postgres với Azure AD auth trong chức năng Azure, chúng ta có thể Azure Managed Identity để thực hiện Azure AD auth, sau đó lấy mã truy cập Azure AD và kết nối cơ sở dữ liệu.

Các bước chi tiết như bên dưới

  1. Bật Azure MSI fro ứng dụng chức năng Azure của bạn

  2. Nhận id máy khách của MSI

az login
az ad sp show --id <the object id of the msi> --query appId --output tsv
  1. Định cấu hình quản trị Azure AD trong cơ sở dữ liệu Postgres

  2. Sử dụng quản trị viên Azure AD để kết nối cơ sở dữ liệu. (Tôi sử dụng PgAdmin để kết nối)

SET aad_validate_oids_in_tenant = off;
CREATE ROLE <userName> WITH LOGIN PASSWORD '<the appid of the MSI>' IN ROLE azure_ad_user;
  1. Định cấu hình tường lửa máy chủ Postgres. Vui lòng thêm địa chỉ IP gửi đi của ứng dụng chức năng Azure trong tường lửa. Về cách lấy địa chỉ IP gửi đi của ứng dụng hàm Azure và định cấu hình tường lửa máy chủ Postgres, vui lòng tham khảo tại đây tại đây

  2. Nếu bạn bật SSL, vui lòng tải xuống chứng chỉ SSL qua liên kết

  3. Hàm số. (Tôi sử dụng lõi .net để viết mẫu)

một. sdk

 <PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="1.5.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.8" />
    <PackageReference Include="Npgsql" Version="4.1.3.1" />

b. thêm chứng chỉ SSL ở trên trong dự án. Ví dụ:tôi tạo một thư mục cert trong dự án của tôi và lưu chứng chỉ trong thư mục

c. mã


        [FunctionName("Http")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log, ExecutionContext context)
        {

            var azureServiceTokenProvider = new AzureServiceTokenProvider();
            string accessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://ossrdbms-aad.database.windows.net");
         
            string Host = "test05.postgres.database.azure.com";
            string User = "[email protected]";
            string Database = "postgres";
            string connString =
                String.Format(
                    "Server={0}; User Id={1}; Database={2}; Port={3}; Password={4};SSLMode=Require",
                    Host,
                    User,
                    Database,
                    5432,
                    accessToken);
            string result = string.Empty;
            using (var conn = new NpgsqlConnection(connString))
            {
                ProvideClientCertificatesCallback provideClientCertificates = clientCerts =>
                {
                    string clientCertPath = context.FunctionAppDirectory + "\\cert\\BaltimoreCyberTrustRoot.crt.pem";
                    var cert = new X509Certificate2(clientCertPath);
                    clientCerts.Add(cert);
                };
                conn.ProvideClientCertificatesCallback += provideClientCertificates;
                Console.Out.WriteLine("Opening connection using access token...");
                conn.Open();

                using (var command = new NpgsqlCommand("SELECT version()", conn))
                {

                    var reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        Console.WriteLine("\nConnected!\n\nPostgres version: {0}", reader.GetString(0));
                        result = reader.GetString(0);
                    }
                }
            }
            return new OkObjectResult(result);

        }

Để biết thêm chi tiết, vui lòng tham khảo tại đây




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cột PostgreSQL foo không tồn tại trong đó foo là giá trị

  2. Làm thế nào để chuyển đổi khoảng thời gian như 1 ngày 01:30:00 thành 25:30:00?

  3. Nhận dấu thời gian từ các cột ngày và giờ nối

  4. Không thể kết nối với cơ sở dữ liệu Postgres từ vùng chứa golang Docker

  5. Làm thế nào để truy cập chỉ mục nội bộ mảng với postgreSQL?