Aracılığıyla paylaş


Azure SQL Veritabanı ile parolasız bağlantılar kullanmak için bir Node.js uygulamasını geçirme

Şunlar için geçerlidir:Azure SQL Veritabanı

Azure SQL Veritabanı uygulama isteklerinin kimliği doğrulanmalıdır. Azure SQL Veritabanı kimlik doğrulaması için birden çok seçenek olsa da, mümkün olduğunda uygulamalarınızda parolasız bağlantılara öncelik vermelisiniz. Parola veya gizli anahtar kullanan geleneksel kimlik doğrulama yöntemleri, güvenlik riskleri ve karmaşıklıklar oluşturur. Parolasız bağlantılara geçmenin avantajları hakkında daha fazla bilgi edinmek için Azure services hub'ı için parolasız bağlantılar'ı ziyaret edin.

Aşağıdaki öğreticide, kullanıcı adı ve parola çözümü yerine parolasız bağlantılar kullanmak üzere Azure SQL Veritabanı bağlanmak üzere mevcut bir Node.js uygulamasının nasıl geçirilir açıklanmaktadır.

Azure SQL Veritabanı yapılandırma

Parolasız bağlantılar, Azure SQL Veritabanı dahil olmak üzere Azure hizmetlerine bağlanmak için Microsoft Entra kimlik doğrulamasını kullanır. Microsoft Entra kimlik doğrulaması, izin yönetimini basitleştirmek için kimlikleri merkezi bir konumda yönetebilirsiniz. Azure SQL Veritabanı için Microsoft Entra kimlik doğrulamasını yapılandırma hakkında daha fazla bilgi edinin:

Bu geçiş kılavuzu için, Azure SQL Veritabanı atanmış bir Microsoft Entra yöneticisine sahip olduğunuzdan emin olun.

  1. Mantıksal sunucunuzun Microsoft Entra sayfasına gidin.

  2. Microsoft Entra Id açılır menüsünü açmak için Yöneticiyi ayarla'yı seçin.

  3. Microsoft Entra Id açılır menüsünde yönetici olarak atamak istediğiniz kullanıcıyı arayın.

  4. Kullanıcıyı seçin ve Seç'i seçin.

    Microsoft Entra yöneticisini etkinleştirmeyi gösteren ekran görüntüsü.

Yerel geliştirme ortamınızı yapılandırma

Parolasız bağlantılar hem yerel hem de Azure tarafından barındırılan ortamlarda çalışacak şekilde yapılandırılabilir. Bu bölümde, tek tek kullanıcıların yerel geliştirme için Azure SQL Veritabanı kimlik doğrulaması yapmalarına izin vermek için yapılandırmalar uygulayacaksınız.

Azure'da oturum açma

Yerel geliştirme için, Azure SQL Veritabanı erişmek için kullanmak istediğiniz Azure AD hesabıyla oturum açtığınızdan emin olun. Azure CLI veya Azure PowerShell gibi popüler geliştirme araçlarıyla kimlik doğrulaması yapabilirsiniz. Kimlik doğrulaması yapabileceğiniz geliştirme araçları farklı dillerde farklılık gösterir.

Aşağıdaki komutu kullanarak Azure CLI aracılığıyla Azure'da oturum açın:

az login

Veritabanı kullanıcısı oluşturma ve rol atama

Azure SQL Veritabanı'de bir kullanıcı oluşturun. Kullanıcı, Azure'da oturum açma bölümünde yerel olarak oturum açmak için kullandığınız Azure hesabına karşılık gelir.

  1. Azure portalında SQL veritabanınıza göz atın ve Sorgu düzenleyicisi (önizleme) öğesini seçin.

  2. Hesabınızı kullanarak veritabanında oturum açmak için ekranın sağ tarafındaki Devam et'i <your-username> seçin.

  3. Sorgu düzenleyicisi görünümünde aşağıdaki T-SQL komutlarını çalıştırın:

    CREATE USER [user@domain] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user@domain];
    ALTER ROLE db_datawriter ADD MEMBER [user@domain];
    ALTER ROLE db_ddladmin ADD MEMBER [user@domain];
    GO
    

    Azure Query düzenleyicisinin nasıl kullanılacağını gösteren ekran görüntüsü.

    Bu komutların çalıştırılması, SQL DB Katkıda Bulunanı rolünü belirtilen hesaba atar. Bu rol, kimliğin veritabanınızın verilerini ve şemasını okumasına, yazmasına ve değiştirmesine olanak tanır. Atanan roller hakkında daha fazla bilgi için bkz . Sabit veritabanı rolleri.

Yerel bağlantı yapılandırmasını güncelleştirme

  1. Uygulamanız için ortam ayarları oluşturun.

    AZURE_SQL_SERVER=<YOURSERVERNAME>.database.windows.net
    AZURE_SQL_DATABASE=<YOURDATABASENAME>
    AZURE_SQL_PORT=1433
    
  2. sql sürücüsü Node.js kullanarak Azure SQL Veritabanı bağlanan mevcut uygulama kodu - sıkıcı küçük değişiklikler ile parolasız bağlantılarla çalışmaya devam eder. Kullanıcı tarafından atanan yönetilen

    import sql from 'mssql';
    
    // Environment settings - no user or password
    const server = process.env.AZURE_SQL_SERVER;
    const database = process.env.AZURE_SQL_DATABASE;
    const port = parseInt(process.env.AZURE_SQL_PORT);
    
    // Passwordless configuration
    const config = {
        server,
        port,
        database,
        authentication: {
            type: 'azure-active-directory-default',
        },
        options: {
            encrypt: true,
            clientId: process.env.AZURE_CLIENT_ID  // <----- user-assigned managed identity        
        }
    };
    
    // Existing application code
    export default class Database {
        config = {};
        poolconnection = null;
        connected = false;
    
        constructor(config) {
            this.config = config;
            console.log(`Database: config: ${JSON.stringify(config)}`);
        }
    
        async connect() {
            try {
                console.log(`Database connecting...${this.connected}`);
                if (this.connected === false) {
                    this.poolconnection = await sql.connect(this.config);
                    this.connected = true;
                    console.log('Database connection successful');
                } else {
                    console.log('Database already connected');
                }
            } catch (error) {
                console.error(`Error connecting to database: ${JSON.stringify(error)}`);
            }
        }
    
        async disconnect() {
            try {
                this.poolconnection.close();
                console.log('Database connection closed');
            } catch (error) {
                console.error(`Error closing database connection: ${error}`);
            }
        }
    
        async executeQuery(query) {
            await this.connect();
            const request = this.poolconnection.request();
            const result = await request.query(query);
    
            return result.rowsAffected[0];
        }
    }
    
    const databaseClient = new Database(config);
    const result = await databaseClient.executeQuery(`select * from mytable where id = 10`);
    

    Ortam AZURE_CLIENT_ID değişkeni bu öğreticinin ilerleyen bölümlerinde oluşturulur.

Uygulamayı test etme

Uygulamanızı yerel olarak çalıştırın ve Azure SQL Veritabanı bağlantılarının beklendiği gibi çalıştığını doğrulayın. Azure kullanıcılarında ve rollerinde yapılan değişikliklerin Azure ortamınızda yayılması birkaç dakika sürebilir. Uygulamanız artık geliştiricilerin uygulamadaki gizli dizileri yönetmek zorunda kalmadan yerel olarak çalışacak şekilde yapılandırılmıştır.

Azure barındırma ortamını yapılandırma

Uygulamanız yerel olarak parolasız bağlantılar kullanacak şekilde yapılandırıldıktan sonra, aynı kod Azure'a dağıtıldıktan sonra Azure SQL Veritabanı için kimlik doğrulaması yapabilir. Aşağıdaki bölümlerde, yönetilen kimlik kullanarak Azure SQL Veritabanı bağlanmak için dağıtılan bir uygulamanın nasıl yapılandırılacağı açıklanmaktadır. Yönetilen kimlikler, Microsoft Entra kimlik doğrulamasını destekleyen kaynaklara bağlanırken uygulamaların kullanması için Microsoft Entra Id'de (eski adıYla Azure Active Directory) otomatik olarak yönetilen bir kimlik sağlar. Yönetilen kimlikler hakkında daha fazla bilgi edinin:

Yönetilen kimliği oluşturma

Azure portalını veya Azure CLI'yi kullanarak kullanıcı tarafından atanan bir yönetilen kimlik oluşturun. Uygulamanız diğer hizmetlerde kimlik doğrulaması yapmak için bu kimliği kullanır.

  1. Azure portalının üst kısmında Yönetilen kimlikler'i arayın. Yönetilen Kimlikler sonucunu seçin.
  2. Yönetilen Kimliklere genel bakış sayfasının üst kısmındaki + Oluştur'u seçin.
  3. Temel Bilgiler sekmesinde aşağıdaki değerleri girin:
    • Abonelik: İstediğiniz aboneliği seçin.
    • Kaynak grubu: İstediğiniz kaynak grubunu seçin.
    • Bölge: Konumunuza yakın bir bölge seçin.
    • Ad: Kimliğiniz için MigrationIdentity gibi tanınabilir bir ad girin.
  4. Sayfanın alt kısmındaki Gözden geçir ve oluştur'u seçin.
  5. Doğrulama denetimleri tamamlandığında Oluştur'u seçin. Azure, kullanıcı tarafından atanan yeni bir kimlik oluşturur.

Kaynak oluşturulduktan sonra, yönetilen kimliğin ayrıntılarını görüntülemek için Kaynağa git'i seçin.

Azure portalını kullanarak yönetilen kimlik oluşturmayı gösteren ekran görüntüsü.

Yönetilen kimliği web uygulamanızla ilişkilendirme

Web uygulamanızı, oluşturduğunuz kullanıcı tarafından atanan yönetilen kimliği kullanacak şekilde yapılandırın.

Kullanıcı tarafından atanan yönetilen kimliği uygulamanızla ilişkilendirmek için Azure portalında aşağıdaki adımları tamamlayın. Bu adımlar aşağıdaki Azure hizmetleri için de geçerlidir:

  • Azure Bahar Uygulamaları
  • Azure Konteyner Uygulamaları
  • Azure sanal makineleri
  • Azure Kubernetes Service
  • Web uygulamanızın genel bakış sayfasına gidin.
  1. Sol gezinti bölmesinden Kimlik'i seçin.

  2. Kimlik sayfasında Kullanıcı tarafından atanan sekmesine geçin.

  3. Kullanıcı tarafından atanan yönetilen kimlik ekle açılır öğesini açmak için + Ekle'yi seçin.

  4. Kimliği oluşturmak için daha önce kullandığınız aboneliği seçin.

  5. MigrationIdentity öğesini ada göre arayın ve arama sonuçlarından seçin.

  6. Kimliği uygulamanızla ilişkilendirmek için Ekle'yi seçin.

    Yönetilen kimlik atamayı gösteren ekran görüntüsü.

Kimlik için veritabanı kullanıcısı oluşturma ve roller atama

Kullanıcı tarafından atanan yönetilen kimliğe geri eşleyen bir SQL veritabanı kullanıcısı oluşturun. Uygulamanızın veritabanınızın verilerini ve şemasını okumasına, yazmasına ve değiştirmesine izin vermek için kullanıcıya gerekli SQL rollerini atayın.

  1. Azure portalında SQL veritabanınıza göz atın ve Sorgu düzenleyicisi (önizleme) öğesini seçin.

  2. Hesabınızı kullanarak veritabanında oturum açmak için ekranın sağ tarafındaki Devam et'i <username> seçin.

  3. Sorgu düzenleyicisi görünümünde aşağıdaki T-SQL komutlarını çalıştırın:

    CREATE USER [user-assigned-identity-name] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_datawriter ADD MEMBER [user-assigned-identity-name];
    ALTER ROLE db_ddladmin ADD MEMBER [user-assigned-identity-name];
    GO
    

    Yönetilen kimlik için SQL kullanıcısı oluşturmak üzere Azure Query düzenleyicisinin nasıl kullanılacağını gösteren ekran görüntüsü.

    Bu komutların çalıştırılması, kullanıcı tarafından atanan yönetilen kimliğe SQL DB Katkıda Bulunanı rolünü atar. Bu rol, kimliğin veritabanınızın verilerini ve şemasını okumasına, yazmasına ve değiştirmesine olanak tanır.

Önemli

Kurumsal üretim ortamlarında veritabanı kullanıcı rolleri atarken dikkatli olun. Bu senaryolarda uygulama, tek bir yükseltilmiş kimlik kullanarak tüm işlemleri gerçekleştirmemelidir. Belirli görevler için belirli izinlere sahip birden çok kimlik yapılandırarak en az ayrıcalık ilkesini uygulamaya çalışın.

Aşağıdaki kaynaklarda veritabanı rollerini ve güvenliğini yapılandırma hakkında daha fazla bilgi edinebilirsiniz:

Yönetilen kimlik istemci kimliği için uygulama ayarı oluşturma

Kullanıcı tarafından atanan yönetilen kimliği kullanmak için bir AZURE_CLIENT_ID ortam değişkeni oluşturun ve yönetilen kimliğin istemci kimliğine eşit olarak ayarlayın. Bu değişkeni Azure portalında uygulamanızın Yapılandırma bölümünde ayarlayabilirsiniz. İstemci kimliğini Azure portalındaki yönetilen kimlik kaynağının Genel Bakış bölümünde bulabilirsiniz.

Değişikliklerinizi kaydedin ve bunu otomatik olarak yapmazsa uygulamayı yeniden başlatın.

Sistem tarafından atanan bir yönetilen kimlik kullanmanız gerekiyorsa özelliğini atlaoptions.clientId. Yine de özelliği geçirmeniz authentication.type gerekir.

const config = {
  server,
  port,
  database,
  authentication: {
    type: 'azure-active-directory-default'
  },
  options: {
    encrypt: true
  }
};

Uygulamayı test etme

Her şeyin hala çalıştığından emin olmak için uygulamanızı test edin. Tüm değişikliklerin Azure ortamınızda yayılması birkaç dakika sürebilir.