首页 > 解决方案 > Azure python 创建用户数据库

问题描述

我正在尝试一些 azure 文档快速入门教程来创建一个具有一个 SQL Server 和一个数据库的资源组。代码运行得很好,我能够创建所有资源。现在我很好奇如何在同一个脚本中运行代码以在我正在创建的数据库中创建一个只读用户?

这是我的代码:

import os
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.sql import SqlManagementClient

REGION = 'westus'
GROUP_NAME = 'resource-group-name'
SERVER_NAME = 'server-name'
DATABASE_NAME = 'sample-db'


def run_example():
    subscription_id = os.environ.get(
        'AZURE_SUBSCRIPTION_ID',
        '11111-11-1111-11111-111111')  # your Azure Subscription Id
    credentials = ServicePrincipalCredentials(
        client_id='my-client-id',
        secret='my-secret',
        tenant='tenant'
    )
    resource_client = ResourceManagementClient(credentials, subscription_id)
    sql_client = SqlManagementClient(credentials, subscription_id)

    # You MIGHT need to add SQL as a valid provider for these credentials
    # If so, this operation has to be done only once for each credentials
    resource_client.providers.register('Microsoft.Sql')

    # Create Resource group
    print('Create Resource Group')
    resource_group_params = {'location': 'westus'}
    print_item(resource_client.resource_groups.create_or_update(
        GROUP_NAME, resource_group_params))

    # Create a SQL server
    print('Create a SQL server')
    server = sql_client.servers.create_or_update(
        GROUP_NAME,
        SERVER_NAME,
        {
            'location': REGION,
            'version': '12.0',  # Required for create
            'administrator_login': 'server-login',  # Required for create
            'administrator_login_password': 'pass-word'  # Required for create
        }
    )
    print_item(server)
    print('\n\n')

    # Get SQL server
    print('Get SQL server')
    server = sql_client.servers.get_by_resource_group(
        GROUP_NAME,
        SERVER_NAME,
    )
    print_item(server)
    print("\n\n")

    # List SQL servers by resource group
    print('List SQL servers in a resource group')
    for item in sql_client.servers.list_by_resource_group(GROUP_NAME):
        print_item(item)
    print("\n\n")

    # List SQL servers by subscription
    print('List SQL servers in a subscription')
    for item in sql_client.servers.list():
        print_item(item)
    print("\n\n")

    # List SQL servers usage
    print('List SQL servers usage')
    for item in sql_client.servers.list_usages(GROUP_NAME, SERVER_NAME):
        print_metric(item)
    print("\n\n")

    # Create a database
    print('Create SQL database')
    async_db_create = sql_client.databases.create_or_update(
        GROUP_NAME,
        SERVER_NAME,
        DATABASE_NAME,
        {
            'location': REGION
        }
    )
    # Wait for completion and return created object
    database = async_db_create.result()
    print_item(database)
    print("\n\n")

    # Get SQL database
    print('Get SQL database')
    database = sql_client.databases.get(
        GROUP_NAME,
        SERVER_NAME,
        DATABASE_NAME
    )
    print_item(database)
    print("\n\n")

    # List SQL databases by server
    print('List SQL databases in a server')
    for item in sql_client.databases.list_by_server(GROUP_NAME, SERVER_NAME):
        print_item(item)
    print("\n\n")

    # List SQL database usage
    print('List SQL database usage')
    for item in sql_client.databases.list_usages(GROUP_NAME, SERVER_NAME, DATABASE_NAME):
        print_metric(item)
    print("\n\n")

def print_item(group):
    """Print an Azure object instance."""
    print("\tName: {}".format(group.name))
    print("\tId: {}".format(group.id))
    print("\tLocation: {}".format(group.location))
    if hasattr(group, 'tags'):
        print("\tTags: {}".format(group.tags))
    if hasattr(group, 'properties'):
        print_properties(group.properties)


def print_metric(group):
    """Print an SQL metric."""
    print("\tResource Name: {}".format(group.resource_name))
    print("\tName: {}".format(group.display_name))
    print("\tValue: {}".format(group.current_value))
    print("\tUnit: {}".format(group.unit))


def print_properties(props):
    """Print a ResourceGroup properties instance."""
    if props and props.provisioning_state:
        print("\tProperties:")
        print("\t\tProvisioning State: {}".format(props.provisioning_state))
    print("\n\n")


if __name__ == "__main__":
    run_example()


我错过了最后一点,我想在我正在创建的数据库中创建这个只读用户。非常感谢您的时间和帮助

标签: azure-devopsazure-sql-databaseazure-sdk-python

解决方案


在 Azure SQL 数据库中创建用户与创建数据库实例非常不同。需要admin账号或者足够权限,并且用户绑定登录,登录必须在master DB中创建,用户必须在当前用户D中创建,然后将数据库角色更改为用户。您使用的代码不适合创建用户。

即使使用pyodbc脚本,您仍然需要连接字符串,指定数据库/用户,/密码。限制是您不能使用一个连接字符串或 SQL 数据库连接访问主数据库和用户数据库。

恐怕我们不能用代码做到这一点。


推荐阅读