培训
认证
Microsoft Certified: Azure Database Administrator Associate - Certifications
使用 Microsoft PaaS 关系数据库产品/服务,管理云、本地和混合关系数据库的 SQL Server 数据库基础结构。
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics(仅限专用 SQL 池)
Fabric 中的 SQL 数据库
Azure SQL 数据库、Microsoft Fabric SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics 支持动态数据掩码 (DDM)。 动态数据掩码功能通过对非特权用户屏蔽敏感数据来限制此类数据的泄漏。
动态数据掩码使客户能够指定在对应用层所产生影响最小的前提下可以透露的敏感数据量,从而帮助防止敏感数据遭到未经授权的访问。 它是一项基于策略的安全功能,可以隐藏对指定数据库字段进行查询时获得的结果集中的敏感数据,而不会更改数据库中的数据。
例如,呼叫中心的服务代表可能通过确认呼叫方电子邮件的几个字符来对其进行识别,但是完整的电子邮件地址不应泄露给服务代表。 掩码规则可定义为对任何查询的结果集中的所有电子邮件地址进行掩蔽。 另举一例:在需要进行故障排除时,开发人员可通过定义适当的数据掩码来保护个人数据,因此可在不违反符合性法规的情况下,对生产环境进行查询。
对于 Azure SQL 数据库,通过在 SQL 数据库配置窗格中的“安全性”下选择“动态数据掩码”边栏选项卡,在 Azure 门户中设置动态数据掩码策略。
无法使用 Azure 门户为 SQL 托管实例或 Fabric SQL 数据库设置此功能。 请改用 T-SQL,如本文的动态数据掩码示例中所示。 有关详细信息,请参阅 Dynamic Data Masking。
掩码函数 | 掩码逻辑 |
---|---|
默认 | 根据指定字段的数据类型完全掩码 * 对于字符串数据类型(nchar、ntext、nvarchar),将使用 XXXX (或更少,如果字段大小小于 4 个字符)。* 对于数值数据类型(bigint、bit、decimal、int、money、numeric、smallint、smallmoney、tinyint、float、real),将使用零值。 * 对于日期/时间数据类型(date、datetime2、datetime、datetimeoffset、smalldatetime、time),将使用 1900-01-01 。* 对于 sql_variant,将使用当前类型的默认值。 * 对于 XML,将使用文档 <masked /> 。* 对于特殊数据类型(timestamp、table、HierarchyID、uniqueidentifier、binary、image、varbinary 和空间类型),将使用空值。 |
信用卡 | 此掩码方法公开指定字段的最后四位数,并添加一个信用卡格式的常量字符串作为前缀。XXXX-XXXX-XXXX-1234 |
电子邮件 | 此掩码方法公开第一个字母并将域替换为 XXX.com,并使用一个电子邮件地址格式的常量字符串作为前缀。aXX@XXXX.com |
随机数 | 此掩码方法根据选定边界和实际数据类型生成随机数。 如果指定的边界相等,则掩码函数是常数。![]() |
自定义文本 | 此掩码方法公开第一个和最后一个字符,并在中间添加一个自定义填充字符串。 如果原始字符串短于公开的前缀和后缀,则只使用填充字符串。prefix[padding]suffix ![]() |
DDM 建议引擎会将数据库中的某些字段标记为可能的敏感字段,可以考虑对这些字段进行屏蔽。 在门户的“动态数据掩码”窗格中,会看到针对数据库建议的列。 针对一个或多个列选择“添加掩码”,然后选择相应的掩码函数,并选择“保存”,即可对这些字段应用掩码。
你可以使用 REST API 以编程方式管理数据掩码策略和规则。 已发布的 REST API 支持以下操作:
以下是用于配置动态数据掩码的内置角色:
以下是使用动态数据屏蔽所需的操作:
读/写:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
读取:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
写入:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
若要详细了解在使用带有 T-SQL 命令的动态数据掩码时的权限,请参阅权限。
通过在数据库的不同级别向未经授权的用户屏蔽敏感数据,来防止对敏感数据进行未经授权的访问并获得控制权。 可以在数据库级别、架构级别、表级别或列级别向任何数据库用户或角色授予或撤销 UNMASK 权限。 结合 Microsoft Entra 身份验证,可以为 Azure 环境中维护的用户、组和应用程序管理 UNMASK 权限。 UNMASK 权限可更精细地控制和限制对数据库中存储的数据进行的未经授权访问,并改进数据安全管理。
创建架构以包含用户表:
CREATE SCHEMA Data;
GO
创建具有掩码列的表:
CREATE TABLE Data.Membership (
MemberID INT IDENTITY(1, 1) NOT NULL,
FirstName VARCHAR(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
LastName VARCHAR(100) NOT NULL,
Phone VARCHAR(12) MASKED WITH (FUNCTION = 'default()') NULL,
Email VARCHAR(100) MASKED WITH (FUNCTION = 'email()') NOT NULL,
DiscountCode SMALLINT MASKED WITH (FUNCTION = 'random(1, 100)') NULL,
BirthDay DATETIME MASKED WITH (FUNCTION = 'default()') NULL
);
插入示例数据:
INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode, BirthDay)
VALUES
('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10, '1985-01-25 03:25:05'),
('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5, '1990-05-14 11:30:00'),
('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50, '2004-02-29 14:20:10'),
('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40, '1990-03-01 06:00:00');
创建架构以包含服务表:
CREATE SCHEMA Service;
GO
创建具有掩码列的服务表:
CREATE TABLE Service.Feedback (
MemberID INT IDENTITY(1, 1) NOT NULL,
Feedback VARCHAR(100) MASKED WITH (FUNCTION = 'default()') NULL,
Rating INT MASKED WITH (FUNCTION = 'default()'),
Received_On DATETIME
);
插入示例数据:
INSERT INTO Service.Feedback (Feedback, Rating, Received_On)
VALUES
('Good', 4, '2022-01-25 11:25:05'),
('Excellent', 5, '2021-12-22 08:10:07'),
('Average', 3, '2021-09-15 09:00:00');
在数据库中创建不同用户:
CREATE USER ServiceAttendant WITHOUT LOGIN;
GO
CREATE USER ServiceLead WITHOUT LOGIN;
GO
CREATE USER ServiceManager WITHOUT LOGIN;
GO
CREATE USER ServiceHead WITHOUT LOGIN;
GO
向数据库中的用户授予读取权限:
ALTER ROLE db_datareader ADD MEMBER ServiceAttendant;
ALTER ROLE db_datareader ADD MEMBER ServiceLead;
ALTER ROLE db_datareader ADD MEMBER ServiceManager;
ALTER ROLE db_datareader ADD MEMBER ServiceHead;
向用户授予不同的 UNMASK 权限:
--Grant column level UNMASK permission to ServiceAttendant
GRANT UNMASK ON Data.Membership(FirstName) TO ServiceAttendant;
-- Grant table level UNMASK permission to ServiceLead
GRANT UNMASK ON Data.Membership TO ServiceLead;
-- Grant schema level UNMASK permission to ServiceManager
GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
--Grant database level UNMASK permission to ServiceHead;
GRANT UNMASK TO ServiceHead;
在用户 ServiceAttendant
的上下文中查询数据:
EXECUTE AS USER = 'ServiceAttendant';
SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
FROM Data.Membership;
SELECT MemberID, Feedback, Rating
FROM Service.Feedback;
REVERT;
在用户 ServiceLead
的上下文中查询数据:
EXECUTE AS USER = 'ServiceLead';
SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
FROM Data.Membership;
SELECT MemberID, Feedback, Rating
FROM Service.Feedback;
REVERT;
在用户 ServiceManager
的上下文中查询数据:
EXECUTE AS USER = 'ServiceManager';
SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
FROM Data.Membership;
SELECT MemberID, Feedback, Rating
FROM Service.Feedback;
REVERT;
在用户 ServiceHead
的上下文下查询数据
EXECUTE AS USER = 'ServiceHead';
SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
FROM Data.Membership;
SELECT MemberID, Feedback, Rating
FROM Service.Feedback;
REVERT;
若要撤销 UNMASK 权限,请使用以下 T-SQL 语句:
REVOKE UNMASK ON Data.Membership(FirstName) FROM ServiceAttendant;
REVOKE UNMASK ON Data.Membership FROM ServiceLead;
REVOKE UNMASK ON SCHEMA::Data FROM ServiceManager;
REVOKE UNMASK ON SCHEMA::Service FROM ServiceManager;
REVOKE UNMASK FROM ServiceHead;
培训
认证
Microsoft Certified: Azure Database Administrator Associate - Certifications
使用 Microsoft PaaS 关系数据库产品/服务,管理云、本地和混合关系数据库的 SQL Server 数据库基础结构。
文档
Azure 门户:动态数据屏蔽 - Azure SQL Database
如何开始在 Azure 门户中使用 Azure SQL 数据库动态数据掩码
专用 SQL 池的列级别安全性 - Azure Synapse Analytics
列级别安全性使客户可以基于用户的执行上下文或组成员身份来控制对数据库表列的访问,从而简化应用程序中的安全性设计和编码,并使你能够对列访问实施限制。
保护专用 SQL 池(以前称为 SQL DW) - Azure Synapse Analytics
在 Azure Synapse Analytics 中保护专用 SQL 池(以前称为 SQL DW)和开发解决方案的技巧。