在规划MicrosoftAzureSQL数据库部署时,请务必考虑需要在纵深防御策略中实施的所有安全措施。我们在上一篇文章中详细介绍了实施基于防火墙的保护的一个方面。此外,我们还概述了此平台即服务(PaaS)产品中内置的身份验证、授权和加密功能。现在是深入研究一些授权方法的时候了,这些方法可以对数据访问进行细粒度控制,包括单个数据库对象和语句类型。在很大程度上,AzureSQLDatabase集成的身份验证和授权机制基于成熟的SQLServer实例使用的相同原则,可以部署在内网或AzureIaaS虚拟机上。但是,它们之间有一些重要的区别值得注意。在身份验证方面,最重要的一点是缺少对Windows集成身份验证的支持。事实上,每次建立SQL数据库连接时,用户都必须明确指定他们的登录身份。这与传统的SQLServer身份验证的工作方式相同,即便如此,也存在一个重要的小问题。具体密码重置,在本地使用场景下会触发自动重新认证,导致会话中断,需要中断当前会话重新连接才能继续使用AzureSQLDatabase。(之所以选择这种方式是为了消除自动重连对性能可能带来的负面影响,这对于基于云的服务尤为重要。)从授权的角度来看,AzureSQLDatabase实现了更适合在服务器级别。优越的。最明显的原因是现在无法使用最高特权的sa登录帐户和相应的sysadminSQL服务器角色(以及所有其他固定服务器角色)。相反,在管理托管每个SQL数据库(包括代表数据库管理单元的Azure平台结构)的逻辑SQLServer时,必须使用主数据库中预定义的两个角色,包括:loginmanager-分配足够的权限来创建和管理登录帐户(而不是securityadmin固定服务器角色)dbmanager-分配创建和管理数据库的权限(而不是dbcreator固定服务角色)这种差异反映在服务级别安全性的管理方式上,它可以防止管理员过度依赖图形SQLServerManagementStudio的对象资源管理器中Security文件夹的界面,强制他们在连接到主数据库时执行相应的T-SQL语句。(虽然SQLServerManagementStudio会自动将连接重定向到主数据库,并在查询窗口自动生成SQL登录模板,实现透明的登录过程)。用户数据库角色对应于传统SQLServer实现中的现有角色,包括以下角色:db_accessadmin分配创建和管理数据库用户的权限。db_backupoperator分配备份数据库的权限。db_datareader被分配了从所有数据库表和视图中读取数据的权限。db_datawriter被分配了将数据写入所有数据库表和视图的权限。db_ddladmin分配在数据库中创建和管理对象的权限。db_denydatareader拒绝从数据库中的任何表或视图读取数据的权限。db_denydatawriter拒绝向数据库中的任何表和视图写入数据的权限。db_owner被分配了执行所有数据库配置和管理的权限。db_securityadmin分配权限以管理数据库角色成员资格和权限。如果你想进一步微调访问,你可以选择使用模式级和对象级安全,这就像数据库角色一样,与管理员熟悉的本地数据库管理完全一样。具体来说,您可以使用GRANT、REVOKE和DENYT-SQL语句来控制每个架构、对象实例或语句级别的权限。请务必记住,DENY优先于显式分配或基于角色的权限。要创建登录帐户,您需要创建一个主数据库连接会话,而创建用户帐户需要直接连接到目标数据库。这一点很重要,因为同一个会话不能切换数据库上下文(事实证明你通常可以执行USEdatabaseT-SQL语句)——相反,你必须为每个需要管理的数据库建立一个单独的会话。无论是使用AzureManagementPortal、AzurePowerShell模块还是SQLServer实例初始化时,都会自动创建初始登录账号(即服务器级主登录账号)和主数据库同名用户执行相应的RESTAPI初始化。.从授权的角度来看,这个登录帐户是唯一的,因为它被隐式分配了与loginmanager和dbmanager角色关联的权限(即使它实际上不是这些角色的成员)。此外,您可以使用它连接到同一逻辑服务器上的任何数据库。因此,可以使用CREATELOGINT-SQL语句创建更多的登录账号(查询master数据库的sys.sql_logins视图,列出所有登录账号)。要使用这些帐户信息连接到任何数据库(包括主数据库),您必须首先在该数据库上创建一个相应的用户帐户。实际上,如果要给新成员分配loginmanager或dbmanager角色,需要先使用服务器级的master登录账号登录master数据库,创建一个新的登录账号,然后创建一个关联的用户这个登录帐号(使用CREATEUSER(...)FROMLOGINT-SQL语句),最后执行sp_addrolemember存储过程。同样,如果你想让这些登录账号被用来连接或管理任何用户数据库,你需要先连接到数据库,在数据库上创建一个关联的用户账号(也是使用T-SQL语句),最后执行sp_addrolemember存储过程将新创建的用户分配给一个或多个数据库级角色。但是,需要连接到他们自己创建的数据的dbmanager成员不受此要求的约束,因为他们与dbo用户帐户隐式关联(这意味着它已经是db_owner角色的成员)。这就是我们如何总结AzureSQLDatabase数据保护管理方法,该方法侧重于使用权限作为防止未经授权访问的附加措施。在后续文章中,我们将继续介绍与在云和混合环境中运行SQLServer相关的问题。原文链接:http://www.searchdatabase.com.cn/showcontent_88437.htm
