如何为Azure SQL托管实例配置权限以通过BULK INSERT读取Azure Files文件?
使用Azure Files为Azure SQL托管实例配置BULK INSERT权限
Azure SQL托管实例支持通过SMB协议访问Azure Files执行BULK INSERT,不像SQL Database仅局限于Blob存储。以下是完整配置步骤:
1. 打通网络连接
确保Azure SQL托管实例与目标Azure Files存储账户处于同一VNet,或通过VNet对等连接、私有端点建立连通:
- 若不在同一VNet,为Azure Files配置私有端点,确保托管实例所在VNet可访问该端点IP。
- 检查NSG规则,允许托管实例所在子网向Azure Files的SMB端口(445)发起出站请求。
2. 创建数据库范围凭据
根据所选身份验证方式创建对应凭据:
方式1:使用存储账户密钥
CREATE DATABASE SCOPED CREDENTIAL [AzureFilesCred] WITH IDENTITY = 'your-storage-account-name', -- 替换为你的存储账户名称 SECRET = 'your-storage-account-primary-key'; -- 替换为存储账户主密钥
方式2:使用共享访问签名(SAS)
CREATE DATABASE SCOPED CREDENTIAL [AzureFilesCred] WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'your-sas-token-with-file-permissions'; -- 替换为带文件共享读写权限的SAS令牌
3. 创建外部数据源
指向你的Azure Files共享:
CREATE EXTERNAL DATA SOURCE [AzureFilesSource] WITH ( TYPE = FILE_SYSTEM, LOCATION = '\\your-storage-account-name.file.core.windows.net\your-file-share-name', -- 替换为你的存储账户和共享名称 CREDENTIAL = [AzureFilesCred] );
4. 执行BULK INSERT
调用命令加载目标文件:
BULK INSERT YourTargetTable FROM 'relative-path-to-your-file.csv' -- 替换为文件在共享内的相对路径 WITH ( DATA_SOURCE = 'AzureFilesSource', FORMAT = 'CSV', -- 根据实际文件格式调整 FIRSTROW = 2, -- 若文件含表头则跳过第一行 FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' );
额外注意事项
- 生产环境推荐使用Azure AD身份验证:给托管实例的系统分配托管身份分配Storage File Data SMB Share Contributor角色,此时凭据的
IDENTITY填Azure AD,SECRET留空。 - 方案对比:直接使用Azure Files的方案无需本地中转,更高效且减少维护成本;定时azcopy上传的方案适合临时过渡,但长期需维护定时任务与本地存储。
内容的提问来源于stack exchange,提问作者mbourgon
相关产品推荐
相关产品推荐

