登录中国沈阳网站,平面设计包括哪些内容,安徽建设工程信息网路灯项目,自定义短网址生成器上周#xff0c; 有位朋友给我提出了这样的需求#xff1a;区分用户访问数据库的权限。顺便总结了下有如下要求#xff1a; 某个用户查询所有数据库的权限 某个用户只有备份数据库的权限 给一个用户只能查看指定数据库的权限 给一个用户只有某个表的权限 要进行以上任务 有位朋友给我提出了这样的需求区分用户访问数据库的权限。顺便总结了下有如下要求 某个用户查询所有数据库的权限 某个用户只有备份数据库的权限 给一个用户只能查看指定数据库的权限 给一个用户只有某个表的权限 要进行以上任务首先我们先了解下数据库的权限相关的内容 主体 “主体” 是可以请求 SQL Server资源的实体。 与 SQLServer授权模型的其他组件一样主体也可以按层次结构排列。 主体的影响范围取决于主体定义的范围Windows、服务器或数据库以及主体是否不可分或是一个集合。 例如Windows登录名就是一个不可分主体而Windows组则是一个集合主体。 每个主体都具有一个安全标识符(SID)。 Windows级别的主体 Windows域登录名 Windows 本地登录名 SQL Server-级的主体 SQL Server登录名 服务器角色 数据库级的主体 数据库用户 数据库角色 应用程序角色 SQLServer sa登录名 SQL Server sa登录名是服务器级的主体。 默认情况下该登录名是在安装实例时创建的。 public数据库角色 每个数据库用户都属于 public数据库角色。 当尚未对某个用户授予或拒绝对安全对象的特定权限时则该用户将继承授予该安全对象的public角色的权限。 INFORMATION_SCHEMA和 sys 每个数据库都包含两个实体 INFORMATION_SCHEMA和 sys它们都作为用户出现在目录视图中。这两个实体是 SQL Server 所必需的。 它们不是主体不能修改或删除它们。 基于证书的 SQL Server登录名 名称由双井号 (##)括起来的服务器主体仅供内部系统使用。 下列主体是在安装 SQL Server时从证书创建的不应删除。 ##MS_SQLResourceSigningCertificate## ##MS_SQLReplicationSigningCertificate## ##MS_SQLAuthenticatorCertificate## ##MS_AgentSigningCertificate## ##MS_PolicyEventProcessingLogin## ##MS_PolicySigningCertificate## ##MS_PolicyTsqlExecutionLogin## guest用户 每个数据库包括一个guest。 授予guest用户的权限由对数据库具有访问权限但在数据库中没有用户帐户的用户继承。不能删除guest用户但可通过撤消该用户的CONNECT权限将其禁用。 可以通过在master或 tempdb以外的任何数据库中执行 REVOKE CONNECTFROM GUEST来撤消 CONNECT权限。 客户端和数据库服务器 根据定义客户端和数据库服务器是安全主体可以得到保护。 在建立安全的网络连接前这些实体之间可以互相进行身份验证。 SQLServer支持 Kerberos身份验证协议该协议定义客户端与网络身份验证服务交互的方式。 创建数据库用户 SQL2016中支持11种用户类型 用户基于登录名在 master这是最常见的用户类型。 基于登录名基于的Windows Active Directory帐户的用户 CREATE USER [Contoso\Fritz]; 基于Windows组的登录名的用户。 CREATE USER [Contoso\Sales]; 基于使用 SQLServer身份验证的登录名的用户。 CREATE USER Mary; 在数据库进行身份验证的用户建议以帮助使你的数据库可移植性。 始终允许在 SQL Database。 中包含的数据库中只允许存在 SQL Server。 基于无登录名的 Windows用户的用户 CREATEUSER [Contoso\Fritz]; 基于无登录名的Windows组的用户。 CREATE USER [Contoso\Sales]; 中的用户 SQLDatabase或 SQL数据仓库 基于 Azure Active Directory的用户。 CREATE USER [Contoso\Fritz] FROMEXTERNAL PROVIDER; 拥有密码的包含数据库用户。 (在中不可用 SQL数据仓库。)CREATE USER Mary WITHPASSWORD ********; 基于 Windows主体通过 Windows组登录名进行连接的用户 基于无登录名但可通过Windows组中的成员身份连接到数据库引擎的Windows用户的用户 CREATE USER [Contoso\Fritz]; 基于无登录名但可通过其他Windows组中的成员身份连接到数据库引擎的Windows组的用户。 CREATE USER [Contoso\Fritz]; 无法进行身份验证的用户 这些用户无法登录到 SQL Server或 SQL Database。 没有登录名的用户。 不能登录但可以被授予权限 CREATE USER CustomAppWITHOUT LOGIN; 基于证书的用户。 不能登录但可以被授予权限也可以对模块进行签名。 CREATE USERTestProcess FOR CERTIFICATE CarnationProduction50; 基于非对称密钥的用户。 不能登录但可以被授予权限也可以对模块进行签名。 CREATE User TestProcessFROM ASYMMETRIC KEY PacificSales09; 下面的图片显示了创建数据库用户需要的选项的含义 创建用户可以使用界面完成 也可以使用T-SQL来进行创建 -- 创建登录名Test 密码是 123456. CREATELOGIN Test WITH PASSWORD 123456; GO 上面说完了用户下面说下数据库的角色和权限 服务器级别的权限 SQL Server 提供服务器级角色以帮助你管理服务器上的权限。 这些角色是可组合其他主体的安全主体。服务器级角色的权限作用域为服务器范围。 “角色”类似于 Windows 操作系统中的“组”。 SQL Server 提供了九种固定服务器角色。 无法更改授予固定服务器角色的权限。 从 SQL Server 2012 开始您可以创建用户定义的服务器角色并将服务器级权限添加到用户定义的服务器角色。 你可以将服务器级主体SQL Server 登录名、Windows帐户和 Windows 组添加到服务器级角色。 固定服务器角色的每个成员都可以将其他登录名添加到该同一角色。用户定义的服务器角色的成员则无法将其他服务器主体添加到角色。 下表显示了服务器级的固定角色及其权限 下表显示了固定数据库角色及其能够执行的操作。 所有数据库中都有这些角色。无法更改分配给固定数据库角色的权限 无法更改分配给固定数据库角色的权限。 下图显示了分配给固定数据库角色的权限 SQL 2016有一些数据库的特殊权限 msdb角色 msdb数据库中包含下表显示的特殊用途的角色。 使用R Services SQL Server从 SQL Server vNext开始 安装 R Services时其他数据库角色可用于管理包 下面讲如何实现文章前面说的需求 给某个用户查询所有数据库的权限 给某个用户只有备份数据库的权限 给一个用户只有指定数据库的权限 给一个用户只有某个表的权限 给某个用户查询所有数据库的权限 创建一个用户 USE [master] GO CREATE LOGIN [Test1]WITH PASSWORDNpassword123 使用Test1连接数据库实例 可以看到数据库列表 但是无法访问数据库 赋予test1对FinaceDemo的读取权限 USE [FinaceDemo] GO CREATE USER [Test1] FOR LOGIN [Test1] ALTER ROLE [db_datareader] ADD MEMBER [Test1] GO 这样就可以给test1用户对finacedemo的读取权限 但是test1 没有写入权限 这样就可以单独对test1赋予数据库的读取权限进行查看操作。 给某个用户只有备份数据库的权限 Test1 对于finacedemo无备份权限 赋予备份权限 ALTER ROLE [db_backupoperator] ADD MEMBER [Test1] 给一个用户只有指定数据库的权限 我们需要Test1只能看到 FinanceDemo其他所有数据库都不能看到 执行下面脚本 USE [master] Deny VIEW any DATABASE TO Test1; go 运行后的效果 Test1 连接后看不到任何数据库 执行 ALTER AUTHORIZATIONON DATABASE::FinanceDemo TO test1 完成后结果 Test1能查看到赋予权限的数据库 给一个用户只有某个表的权限 创建测试用户test3 USE [master] GO CREATE LOGIN [Test3] WITH PASSWORDNpassword123 -----赋予test2可以登录testDB USE [testdb] GO CREATE USER [Test3] FOR LOGIN [Test3] GO 赋予test3对于t2表的update和select权限 grant update on dbo.t2to test3 grant select on dbo.t2to test3 use testDB 查看test3用户获得的权限 exec sp_helprotect usernametest3 可以看到用户test3拥有了t2的select和update权限 执行select * from t2 执行插入操作失败。 以上介绍了对数据库权限细致的管理更加详细的控制可以参考technet上面的信息。 权限管理非常复杂以上只是做了简单的介绍。需要更加详细的内容需要自己去研究。在technet上可以找到更加详细的信息。 原文地址https://espider.github.io/CLR/inheritance-polymorphism/ .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注 内容转载自公众号 微软中国MSDN 了解更多