我正在尝试构建一个小型 Web 应用程序,其中包括将 pdf 和图像上传到 azure 数据库。然后图像所有者与其他人共享该图像。 我探索了将图像/pdf 插入到启用文件流的 SQL 数据库中,并将图像插入到 azures blob 存储中。我对通过 azure 提供的选项感到有点困惑,因为这是我使用 azure 的第一个项目。看起来 blob 存储选项是最好的方法,但在我走这条路之前,有人知道有更好的结构来构建它吗?
谢谢!! :)
尝试在天蓝色中构建数据库并启用文件流,但这不起作用,因为我在“sp_configure”命令中遇到错误。我查看了 blob 存储,但分配权限似乎更困难。
如果您在 Azure SQL 数据库中启用 FILESTREAM 时遇到问题,并且发现在 Azure Blob 存储中分配权限具有挑战性,那么让我们解决这些问题。
在 Azure SQL 数据库中启用 FILESTREAM: 由于传统 SQL Server 和托管 Azure SQL 数据库服务之间存在一些差异,可能不直接支持在 Azure SQL 数据库中启用 FILESTREAM。 Azure SQL 数据库可能不会公开某些服务器级别的配置。
相反,请考虑使用 Azure Blob 存储来存储二进制数据。
在 Azure Blob 存储中分配权限涉及访问密钥、共享访问签名 (SAS) 和 Azure Active Directory (Azure AD) 凭据的组合。这是基本指南:
Azure 存储帐户:
如果尚未创建 Azure 存储帐户,请创建一个。这是您的 Blob 存储所在的位置。
Blob 容器:
在存储帐户中,创建一个或多个 Blob 容器。这些容器将保存您的 blob(文件)。
访问键:
从 Azure 门户检索存储帐户的访问密钥。您将使用这些密钥进行身份验证。
共享访问签名 (SAS):
为了进行细粒度的访问控制,为特定容器或 blob 生成共享访问签名。这允许您控制权限(读、写、删除)并设置过期时间。
Azure AD 身份验证(可选):
Azure Blob 存储支持基于 Azure AD 的身份验证,允许您使用 Azure AD 凭据对您的存储帐户进行身份验证。
分配权限:
通过访问密钥、SAS 令牌或 Azure AD 身份验证来管理权限。您可以控制谁有权访问容器级别和 Blob 级别。
以下是使用 Azure.Storage.Blobs NuGet 包在 C# 中生成 SAS 令牌的示例:
var blobServiceClient = new BlobServiceClient(connectionString);
var containerClient = blobServiceClient.GetBlobContainerClient(containerName);
var blobSasBuilder = new BlobSasBuilder
{
Resource = "c", // 'c' for container, 'b' for blob
StartsOn = DateTimeOffset.UtcNow.AddMinutes(-1),
ExpiresOn = DateTimeOffset.UtcNow.AddHours(1),
IPRange = new SasIPRange(IPAddress.None, IPAddress.None)
};
blobSasBuilder.SetPermissions(BlobContainerSasPermissions.Read); // Adjust as needed
var sasToken = blobSasBuilder.ToSasQueryParameters(sharedKeyCredentials).ToString();
安全管理访问密钥:
谨慎存储访问密钥。考虑使用 Azure Key Vault 进行安全密钥管理。 Azure AD 身份验证:
如果您使用基于 Azure AD 的身份验证,则可以通过 Azure AD 角色分配权限。 基于角色的访问控制(RBAC):
Azure 存储支持 RBAC,可在更高级别对访问进行细粒度控制。
# Assign a role to a user
az role assignment create --assignee "<user-email>" --role "Storage Blob Data Reader" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/blobServices/default/containers/<container-name>"
始终考虑您的安全要求,并选择符合您的应用程序需求的身份验证和授权机制。对于不太复杂的场景,共享访问签名可能就足够了,而更复杂的应用程序可能会受益于基于 Azure AD 的身份验证和 RBAC。