PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Azure फ़ंक्शंस में PostgreSQL से कनेक्शन के लिए एक्सेस टोकन प्राप्त करें

यदि आप Azure फ़ंक्शन में Azure AD प्रमाणन के साथ Postgres डेटाबेस को कनेक्ट करना चाहते हैं, तो हम Azure AD प्रमाणीकरण करने के लिए Azure प्रबंधित पहचान कर सकते हैं और फिर Azure AD एक्सेस टोकन प्राप्त कर सकते हैं और डेटाबेस कनेक्ट कर सकते हैं।

विस्तृत चरण नीचे दिए गए हैं

  1. अपने Azure फ़ंक्शन ऐप से Azure MSI सक्षम करें

  2. एमएसआई की क्लाइंट आईडी प्राप्त करें

az login
az ad sp show --id <the object id of the msi> --query appId --output tsv
  1. Azure AD admin को Postgres डेटाबेस में कॉन्फ़िगर करें

  2. डेटाबेस को जोड़ने के लिए Azure AD व्यवस्थापक का उपयोग करें। (मैं कनेक्ट करने के लिए PgAdmin का उपयोग करता हूं)

SET aad_validate_oids_in_tenant = off;
CREATE ROLE <userName> WITH LOGIN PASSWORD '<the appid of the MSI>' IN ROLE azure_ad_user;
  1. पोस्टग्रेज़ सर्वर फ़ायरवॉल कॉन्फ़िगर करें। कृपया फ़ायरवॉल में Azure फ़ंक्शन ऐप आउटबाउंड IP पते जोड़ें। Azure फ़ंक्शन ऐप आउटबाउंड IP पते कैसे प्राप्त करें और Postgres सर्वर फ़ायरवॉल को कॉन्फ़िगर करने के तरीके के बारे में, कृपया यहां और यहां

  2. अगर आप एसएसएल को सक्षम करते हैं, तो कृपया SSL प्रमाणपत्र लिंक के ज़रिए

  3. समारोह। (मैं नमूना लिखने के लिए .net कोर का उपयोग करता हूं)

एक। एसडीके

 <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" />

बी। प्रोजेक्ट में एसएसएल प्रमाणपत्र के ऊपर जोड़ें। उदाहरण के लिए, मैं एक फ़ोल्डर बनाता हूं cert मेरे प्रोजेक्ट में और फोल्डर में सर्टिफिकेट सेव करें

सी। कोड


        [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);

        }

अधिक विवरण के लिए, कृपया यहां देखें




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GORM में PostgreSQL फ़ंक्शन को डिफ़ॉल्ट मान के रूप में कैसे सेट करें?

  2. एसक्यूएल में सभी संयुक्त घटनाओं की गणना कैसे करें?

  3. हाइबरनेट बाइटा पुनर्प्राप्ति समस्या पोस्टग्रेज करता है

  4. वस्तुओं के jsonb सरणी में नेस्टेड प्रमुख मानों के लिए रेंज टेस्ट को गति दें

  5. SQL 30 दिनों से पुराने सभी रिकॉर्ड प्राप्त करें