iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何进行数据库权限分配的探讨
  • 695
分享到

如何进行数据库权限分配的探讨

2024-04-02 19:04:59 695人浏览 八月长安
摘要

本篇文章为大家展示了如何进行数据库权限分配的探讨,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先我们先了解下数据库的权限相关的内容主体“主体” 是可以请求 SQL

本篇文章为大家展示了如何进行数据库权限分配的探讨,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

首先我们先了解下数据库的权限相关的内容

主体

“主体” 是可以请求 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 PASSWORD=N'password@123'

使用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 PASSWORD=N'password@123'  -----赋予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  @username='test3'

如何进行数据库权限分配的探讨

可以看到用户test3拥有了t2的select和update权限

执行select * from t2

如何进行数据库权限分配的探讨

执行插入操作失败。

如何进行数据库权限分配的探讨

权限管理非常复杂,以上只是做了简单的介绍。需要更加详细的内容,需要自己去研究。在technet上可以找到更加详细的信息。

上述内容就是如何进行数据库权限分配的探讨,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何进行数据库权限分配的探讨

本文链接: https://www.lsjlt.com/news/67412.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql怎么查看表的索引
    通过查询系统表,可以获取表的索引信息,包括索引名称、是否唯一、索引类型、索引列和行数。常用系统表有:mysql 的 information_schema.statistics、postg...
    99+
    2024-05-14
    mysql oracle
  • sql怎么查看索引
    您可以使用 sql 通过以下方法查看索引:show indexes 语句:显示表中定义的索引列表及其信息。explain 语句:显示查询计划,其中包含用于执行查询的索引。informat...
    99+
    2024-05-14
  • sql怎么查看存储过程
    如何查看 sql 存储过程的源代码:使用 show create procedure 语句直接获取创建脚本。查询 information_schema.routines 表的 routi...
    99+
    2024-05-14
  • sql怎么查看视图表
    要查看视图表,可以使用以下步骤:使用 select 语句获取视图中的数据。使用 desc 语句查看视图的架构。使用 explain 语句分析视图的执行计划。使用 dbms 提供...
    99+
    2024-05-14
    oracle python
  • sql怎么查看创建的视图
    可以通过sql查询查看已创建的视图,具体步骤包括:连接到数据库并执行查询select * from information_schema.views;查询结果将显示视图的名称、...
    99+
    2024-05-14
    mysql
  • sql怎么用循环语句实现查询
    可以通过 do 和 while 语句创建循环,并在循环内执行查询,详细步骤包括:定义循环变量设置循环初始值循环执行查询更新循环变量执行查询循环退出条件 SQL 中使用循环语句实现查询 ...
    99+
    2024-05-14
  • sql怎么用代码修改表中数据
    通过 sql 代码修改表中数据的方法包括:修改单个记录:使用 update 语句设置列值并指定条件。修改多条记录:在 update 语句中指定多个条件来修改满足条件的所有记录。增加新列:...
    99+
    2024-05-14
  • sql怎么用命令创建数据库
    在 sql 中使用 create database 命令创建新数据库,其语法包含以下步骤:指定数据库名称。指定数据库文件和日志文件的位置(可选)。指定数据库大小、最大大小和文件增长(可选...
    99+
    2024-05-14
  • sql怎么用身份证提取年龄
    sql 中提取身份证号码中的年龄的方法:提取出生日期部分(身份证号码中第 7-14 位);使用 to_date 函数转换为日期格式;使用 extract 函数计算与当前日期之间的年差。 ...
    99+
    2024-05-14
  • sql怎么看字段长度
    有两种方法可查看 sql 中的字段长度:使用 information_schema 架构,其中包含元数据信息,可用于查询字段长度。使用内建函数,如 length(),其适用于字符串数据类...
    99+
    2024-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作