爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      与SQL SERVER 安全控制相关的几点说明

      首页 知识中心 服务器 文章详情页

      与SQL SERVER 安全控制相关的几点说明

      2023-07-04 07:08:08 阅读次数:426

      SQL,数据库,服务器

      与SQL Server安全控制相关的几点说明

      (一)几个基本术语

      身份验证(Authentication)是指通过提交服务器评估的凭据以登录到主体请求访问的 SQL Server 的过程。身份验证可以确定接受身份验证的用户或进程的标识。

      用户、账户、账号、登录名、[数据库]用户名

      用户是指能够在SQL Server安全机制下,访问数据库对象中的数据的操作员或客户。用户若要访问数据库对象,必须获得数据库管理员(DBA)分配的账号和密码。从SQL Server管理系统的角度来看,用户就是一组匹配的账户和密码。

      账户和账号是一个概念的不同说法,在服务器中的账户又叫登录名(Login Name),因此访问服务器也称为登录服务器。服务器的登录名可以映射到数据库中成为[数据库]用户名(User Name)。一个登录名可以映射多个数据库用户,而一个用户只能映射一个登录名。

      连接或登录SQL Server服务器时是用的登录名而非用户名登录的,程序里面的连接字符串中的用户名也是指登录名。

      通常用户名与登录名相同(不是强制相同,但为了一目了然通常都在创建用户名时使用与登录名相同的名字)。

      提示:登录名(Login Name)和用户名(User Name)是两个不同的概念:

      登录名:服务器方的一个实体,登录名只能进入SQL Server服务器,但是不能让用户访问服务器中的数据库资源。

      用户名:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。

      登录名作用于它所在的服务器。每个登录名的定义存放在master系统数据库的syslogins表中。

      用户名作用于它所在的数据库。用户定义信息存放在每个数据库的sysusers表中。用登录名登录到SQL Server后,在访问操作各个数据库时,SQL Server会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库(guest是一个特殊的用户名,后面会讲到)。

      与SQL SERVER 安全控制相关的几点说明

      SQL身份验证:适合于非windows平台的用户或Internet用户,需要提供账户和密码。

      Windows身份验证:适合于windows平台用户,利用Windows账户和windows集成验证,不需要提供密码。

      用户想要操作数据库的某个对象(如某张表)需要过三关:

      第一关:我们需要登录到SQL Server系统,即需要登录账户;

      第二关:我们需要访问某个数据库,即需要该数据库的用户账户;

      第三关:我们需要访问数据库中的某个对象(如某张表),需要有该对象的权限。

      主体(principal)是可被授予对安全资源的访问权限的实体(例如登录名、用户、进程、组或角色)。主体可以是主体的集合(比如数据库角色或Windows组)或不可分割的主体(比如本地登录或域登录)。每个主体都具有一个 ID (identification)和一个安全 ID (SID)。

        ⊙ Windows级别的主体:Windows组、Windows域登录名、Windows本地登录名。

        ⊙ SQL Server级的主体:服务器角色、SQLServer登录名。

        ⊙数据库级的主体:数据库角色、数据库用户、应用程序角色。

      上下文切换 (context switch),更改检查执行语句或执行操作的权限时所依据的标识。

      服务器(server)

      1)指安装了SQL SERVER的计算机。2)指SQL Server实例——计算机上运行的 SQLServer的副本。3)指为用户提供服务的计算机软件或组件。

      需要根据上下文理解。

      注册服务器

      注册服务器使您可以存储服务器连接信息(服务器的类型、服务器的名称、登录到服务器时使用的身份验证的类型等),以供将来连接时使用——下次连接该服务器时,不需要重新输入登录信息。

      SQLServer 2000在SQL Server企业管理器中注册服务器,才能使用 SQL Server企业管理器来管理这些服务器。从SQLServer 2005始,在 SQL ServerManagement Studio 中注册服务器,才能使用 SQL Server Management Studio 来管理这些服务器。

      在 Microsoft SQL Server中,可以注册以下类型的服务器:SQLServer数据库引擎、Analysis Services、Reporting Services、IntegrationServices和 SQL Server Compact 3.5SP1。

      (二)SQL Server实例(SQL Server instance)

      SQLServer实例(SQL Server instance),简称实例 (instance),是计算机上运行的SQLServer 的副本。同一台计算机上可以安装运行的多个 SQLServer副本。每个SQL Server实例都包含数据库引擎、Analysis Services和 ReportingServices的 SQL Server,每个SQL Server数据库实例各有一套不为其他实例共享的系统及用户数据库。

      数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务。

      实例又分为“默认实例”(default instance)和“命名实例”(namedinstance),如果在一台计算机上安装第一个SQLSERVER,命名设置保持默认的话,那这个实例就是默认实例。默认实例与安装计算机具有相同名称。命名实例指安装SQL Server时给定了名称,可以安装多个命名实例,给定名称是为了与同一台计算机上的其他命名实例和默认实例区分开。

      SQLServer应用程序可以通过仅指定服务器名称而连接到 SQLServer的默认实例。SQL Server应用程序在连接到服务器上的某个命名实例时必须既指定服务器名称又指定实例名称,计算机名称\实例名称。

      一台计算机上最多只有一个默认实例,也可以没有默认实例,默认实例名与计算机名相同。如果要访问本机上的默认SQL服务器实例,使用计算机名、(local)、localhost、127.0.0.1、.、本机IP地址,都可以达到相同的目的。但如果要访问非本机的SQL服务器,那就必须使用计算机名称\实例名称。

      默认实例和命名实例的区别:

        1、服务中服务名称的区别:

          (1)默认实例:MSSQLSERVER。

          (2)有名命名实例:实列名为benet,在服务中的名称是MSSQL$BENET。

       注:如果你有多个实例的时候会在服务中出现多个服务名称。  

        2、连接到查询分析器或探查器的时候区别:

          (1)默认实例可以使用:“.”(点)、“(local)”、“计算机名称”。

          (2)实例名称:计算机名pcname,实例名benet,连接时使用的名称是pcname\benet。

       (三)安全对象和权限

      安全对象(Securable),可以通过权限得到保护的实体。是SQLServer数据库引擎授权系统控制对其进行访问的资源。如表、视图、触发器等。

      SQLServer中将安全对象分为三个层次,分别为:

        ⊙服务器层级,包含的安全对象:端点、登录、服务器角色、数据库。

        ⊙数据库层级,包含的安全对象:用户、数据库角色、应用程序角色、程序集、消息类型、路由、服务、远程服务绑定、全文目录、证书、非对称密钥、对称密钥、约定、架构。

        ⊙构架(SCHEMA)层级,包含的安全对象:类型、XML架构集合、对象(函数、过程、同义词、表、视图)

      这三个层级是从上到下包含的,级别从高到低。

      说明:端点(endpoint)为服务器级安全对象。Microsoft SQL Server 2005 中的连接管理基于“端点”。一个端点就是一个SQL Server对象,它能够使 SQL Server在网络中通信。对于数据库镜像,服务器实例需要有自己专用的“数据库镜像端点”。此端点用途特殊,专门用于接收来自其他服务器实例的数据库镜像连接。

      权限 (permission),与对象关联的规则,用来规定哪些用户可以获得该对象的访问权限以及方式如何。对安全对象的访问通过授予或拒绝权限进行控制。

      权限可以明确用户能够使用哪些数据库对象,并对它们进行何种操作。用户在数据库内的权限取决于用户账号的权限和该用户所属的角色的权限。

      提示:在设置权限时,尤其要注意权限在安全对象上的继承关系。对于高级别安全对象上设置的权限,会被自动继承到低级别安全对象上。

      理解权限的继承和权限的覆盖会在设置权限时减少很多问题,最佳方法是统筹规划,上机验证。

      (四)架构(schema)

      架构是指包含表、视图、过程等的容器。它位于数据库内部,而数据库位于服务器内部。这些实体就像嵌套框放置在一起。服务器是最外面的框,而架构是最里面的框。架构包含表、视图、过程、函数、同义词、类型、队列、XML架构集合等安全对象。

      注意:

      在 SQL Server 2000和早期版本中,数据库可以包含一个名为“架构”的实体, SQL Server 2000包含 CREATE SCHEMA语句,但此实体实际上是所有者(创建对象时的用户)。在 SQL Server 2005 开始,架构既是一个容器,又是一个命名空间。任何用户都可以拥有架构,并且架构所有权可以转移。从 SQL Server 2005开始,每个用户都拥有一个默认架构。可以使用 CREATE USER或 ALTER USER的 DEFAULT_SCHEMA选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将使用 dbo作为默认架构。

      在SQL Server 2000中,DataBaseName.dbo.TableName解释为:数据库名.所有者.表名。

      从 SQL Server 2005开始,DataBaseName.dbo.TableName解释为:数据库名.架构名.表名。

      在SQL Server 2000中,数据库对象全称是server_name.[database_name].[owner_name].object_name   

      从SQL Server 2005始,数据库对象全称是server_name.[database_name].[schema_name].object_name

      在SQL SERVER2000或以前版本中创建一个对象,对象必须要有一个所有者(owner)。对象是如何属于某个所有者的呢?这依赖于创建对象时的用户。您不能取消对象所有者(object owner)的特权(privileges)。对象所有者可以执行任何与对象有关的操作(例如 INSERT、UPDATE、DELETE、SELECT或 EXECUTE),也可以管理对象的权限。

      与SQL SERVER 安全控制相关的几点说明从2005/2008后,一个我们必须重新认识的情况是对象不再有所有者(owner)。架构包含对象,架构有所有者。

      在2005前(如SQL Server 2000中),没有架构的概念,只有用户的概念,那时候DBO是默认用户。到了2005,有了架构概念,但是为了向后兼容,保留了DBO,并且把DBO作为默认架构,在不指定架构的情况下,默认为dbo,“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。在 SQL Server 2005 中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用 CREATE USER和 ALTER USER的 DEFAULT_SCHEMA选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将把 DBO作为其默认架构。

      (五)dbo

      dbo既是默认架构,也是默认用户。在SQL Server 2000中,dbo作为默认用户。在SQL Server2005中,dbo既作为默认用户,也作为默认架构(如图)。

      dbo作为默认用户,dbo (DataBase Owner,数据库的所有者,拥有数据库中的所有对象),每个数据库都有dbo, sysadmin服务器角色的成员自动映射成dbo,无法删除 dbo用户,且此用户始终出现在每个数据库中。通常,登录名sa映射为库中的用户dbo。另外,固定服务器角色 sysadmin的任何成员都映射到每个数据库内称为 dbo的一个特殊用户上。由固定服务器角色sysadmin的任何成员创建的任何对象都自动属于 dbo。由固定服务器角色 sysadmin的任何成员或 dbo用户创建的任何对象都自动属于dbo,由任何其他用户(包括 db_owner固定数据库角色成员)创建的对象,属于创建该对象的用户,而不是 dbo,用创建该对象的用户名限定。例如:

      如果用户 Andrew是固定服务器角色sysadmin的成员,并创建表 T1,则表 T1属于 dbo,并以 dbo.T1而不是 Andrew.T1进行限定。相反,如果 Andrew不是固定服务器角色sysadmin的成员,而只是固定数据库角色 db_owner的成员,并创建表 T1,则 T1属于 Andrew,并限定为 Andrew.T1。该表属于 Andrew,因为该成员没有将表限定为dbo.T1。

      dbo作为默认架构,在不指定架构的情况下,默认为dbo,“默认架构”的概念,用于解析未使用其完全限定名称引用的对象的名称。在 SQL Server 2005 中,每个用户都有一个默认架构,用于指定服务器在解析对象的名称时将要搜索的第一个架构。可以使用 CREATE USER和 ALTER USER的 DEFAULT_SCHEMA选项设置和更改默认架构。如果未定义 DEFAULT_SCHEMA,则数据库用户将把 DBO作为其默认架构。

      (六)Guest用户

      guest用户不需要映射到登录名。这种用户账号是供数据库中没有明确授予权限给已映射至认证用户使用的。guest供那些已经成功登录到SQL SERVER实例,但是却没有通过用户访问数据库的权限的登录者使用的。

      SQLSERVER 2000中guest用户可以删除;而2005/2008中是不能删除的,却可以取消CONNECT权限,而且为安全起见,所有用户定义的数据库中缺省情况下guest用户的权限都是被取消了的,可在除master和tempdb之外的任何数据库中禁用Guest用户。

      在SQL SERVER 2000中,新建的数据库中没有Guest用户,但可以添加它,也可删除它,添加与删除方法与普通数据库相同。

      在SQL Server 2005或以上版本中GUEST已经默认存在于每个数据库中,但默认情况下,会在新数据库中禁用GUEST用户(在“对象资源管理器→安全性→登录”节点中图标上有禁用标识),我们可以通过以下语句启用GUEST用户:GRANT CONNECT  TO GUEST 。当你决定不再想让该数据库被非数据库授权的用户以GUEST身份进行访问时,可以再次将GUEST帐号禁用。值得一提的是,GUEST用户在数据库中不能被删除,我们只能通过以下语句禁用GUEST用户:REVOKE CONNECT FROMGUEST 。

      在SQL SERVER 2000中,要允许guest用户帐户访问数据库,可以像添加其它数据库用户那样添加它,如:

      USE<Database Name>

      GO

      EXECsp_grantdbaccess 'guest'

      GO

      在SQL SERVER 2005中,允许guest用户帐户

      USE<Database Name>

      GO

      GRANT CONNECT TO GUEST

      GO

      需要提醒的是,对于是否添加Guest用户要谨慎权衡利弊。

      --SQLServer 2000删除guest用户账号

      USE<Database Name>

      GO

      EXECsp_revokedbaccess 'guest'

      GO  

      -- SQLServer 2005禁用guest用户账号

      USE<Database Name>

      GO

      REVOKECONNECT FROM GUEST

      GO

      (七)sa登录名

      SQLServer的 sa登录名是服务器级的主体。默认情况下,该登录名是在安装实例时创建的。在 SQL Server 2005和 SQL Server2008中,sa的默认数据库为 master。这是对早期版本的 SQLServer的行为的更改。

      sa(system administrator系统管理员)是为向后兼容而提供的特殊登录。sysadmin是一种角色。该角色能够执行SQLServer上的任何操作。本质上,任何具有这种角色成员身份的人都是那个服务器上的sa。这种服务器角色的创建为微软提供了某一天去除sa登录的能力——实际上,联机丛书把sa称作本质上为遗留物的东西。

      与以前版本不同,SQL Server 2008,即使是用混合模式安装,sa也默认禁用。

      注意,sa是一个默认的SQL Server登录名,拥有操作SQL Server系统的所有权限,该登录名不能被删除。当采用混合模式安装Microsoft SQL Server系统之后,应该为sa指定一个密码,应为 sa登录分配一个强密码(strongpassword)。

      sa登录名会映射到 sysadmin固定服务器角色,它对整个服务器有不能撤销的管理凭据。如果攻击者以系统管理员的身份获取了访问权限,则可能造成的危害是无法预计的。

       (八)其它几个默认配置的的登录(Logins)和用户(Users)

      默认配置的的登录和用户除了dbo用户、Guest用户、sa登录,还有如下几个:

      Administrators组是一个特殊的登录。administrator用户默认administrators组的成员。

      Administrators组实际名称为BUILTIN\Administrators。早期版本,这个组的所有成员均为 sysadmin 角色的成员(这意味着Administrators组中的成员具有最高权限),但可以从该角色中移除这些成员。与以前版本不同,SQL Server 2008默认情况下,本地 Windows组 BUILTIN\Administrators不再包含在新的 SQL Server 2008安装上的 SQL Server的 sysadmin固定服务器角色中。

      提示:每个版本的 SQL Server都具有不同的安全功能,默认配置也不尽相同,后出的版本更有利于安全,但安全性和使用方便这两种需求可能有矛盾的一面,最佳方法是上机了解验证。

      NETWORKSERVICE和SYSTEM登录账户

      NETWORKSERVICE和SYSTEM登录账户,实际名称为NT AUTHORITY\NETWORK SERVICE和NT AUTHORITY\SYSTEM,是否存在这些,依赖于服务器的配置。如果配置了报表服务器,将出现NETWORK SERVICE登录账户。

      INFORMATION_SCHEMA和sys用户

      INFORMATION_SCHEMA和sys又是SQL Server 预定义的架构(内置架构)名称,它们与INFORMATION_SCHEMA和sys用户具有相同的名称。不能删除,主要用于向后兼容性。可以使用INFORMATION_SCHEMA用户和sys用户访问INFORMATION_SCHEMA和sys架构的系统视图,获取有关数据库元数据信息。

      (九)SQL Server中的角色

      角色 (role),是SQL Server用来管理服务器和数据库权限的,是安全帐户的集合,在管理权限时可以视为一个单元——作为分配权限的单位。

      SQLServer中的角色分为服务器级别和数据库级别角色。

      ◇服务器级别角色

      服务器级别角色用于帮助管理服务器上的权限。服务器角色的权限作用域为服务器范围。可以将登录名(Login Name)添加到服务器角色。

      符合权限要求的用户,可以将服务器级主体(SQL Server登录名、Windows帐户和 Windows组)添加到服务器级角色。固定服务器角色的每个成员都可以将其他登录名添加到该同一角色。

      固定服务器角色简介:

       1)sysadmin:系统管理员,角色成员可对SQLServer服务器进行所有的管理工作,为最高管理角色。这个角色一般适合于数据库管理员(DBA)。

       2)securityadmin:安全管理员,角色成员可以管理登录名及其属性。可以授予、拒绝、撤销服务器级和数据库级的权限。另外还可以重置SQL Server登录名的密码。

       3)serveradmin:服务器管理员,角色成员具有对服务器进行设置及关闭服务器的权限。

       4)setupadmin:设置管理员,角色成员可以添加和删除链接服务器,并执行某些系统存储过程。

       5)processadmin:进程管理员,角色成员可以终止SQLServer实例中运行的进程。

       6)diskadmin:用于管理磁盘文件。

       7)dbcreator:数据库创建者,角色成员可以创建、更改、删除或还原任何数据库。

       8)bulkadmin:可执行BULK INSERT语句,但是这些成员对要插入数据的表必须有INSERT权限。BULK INSERT语句的功能是以用户指定的格式复制一个数据文件至数据库表或视图。

       9)在sql server 2005 sp2(补丁)及以后版本,服务器角色中还可以看到一个public角色。每个 SQL Server登录名均属于 public服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public角色的权限。public服务器角色默认拥有 VIEW ANY DATABASE(查看任何数据库)权限。[VIEW ANY DATABASE权限控制是否显示sys.databases和 sys.sysdatabases视图以及 sp_helpdb系统存储过程中的元数据(metadata)。]

      从 SQL Server 2012开始,您可以创建用户定义的服务器角色,并将服务器级权限添加到用户定义的服务器角色。

      每个版本的 SQL Server都具有不同的安全功能,版本越高,功能越强。

      可以利用系统函数IS_SRVROLEMEMBER指示当前用户的 SQLServer登录名是否是固定服务器角色的成员。

      可以利用系统存储过程sp_helpsrvrolemember返回有关 SQL Server 固定服务器角色成员的信息。

      --查询 sysadmin固定服务器角色的成员。

      execsp_helpsrvrolemember 'sysadmin'

      ◇数据库级别的角色

      数据库级别角色用于帮助管理数据库中的权限。数据库级角色的权限作用域为数据库范围。可以将[数据库]用户名(User Name)添加到数据库角色。

      SQLServer中有两种类型的数据库级角色:数据库中预定义的“固定数据库角色”和您可以创建的“灵活数据库角色”(自定义数据库角色)。

      固定数据库角色是在数据库级别定义的,并且存在于每个数据库中。 db_owner和db_securityadmin数据库角色的成员可以管理固定数据库角色成员身份。但是,只有db_owner数据库角色的成员能够向db_owner固定数据库角色中添加成员。 msdb数据库中还有一些特殊用途的固定数据库角色。

      符合权限要求的用户,可以向数据库级角色中添加数据库帐户和其他 SQL Server角色。固定数据库角色的每个成员都可向同一个角色添加其他登录名。

      固定数据库角色简介:

       1)db_owner:数据库所有者,这个数据库角色的成员可执行数据库的所有管理操作。

       2)db_accessadmin:数据库访问权限管理者,角色成员具有添加、删除数据库使用者、数据库角色和组的权限。

       3)db_securityadmin:数据库安全管理员,角色成员可管理数据库中的权限,如设置数据库表的增加、删除、修改和查询等存取权限。

       4)db_ddladmin:数据库DDL管理员,角色成员可增加、修改或删除数据库中的对象。

       5)db_backupoperator:数据库备份操作员,角色成员具有执行数据库备份的权限。

       6)db_datareader:数据库数据读取者,角色成员可以从所有用户表中读取数据。

       7)db_datawriter:数据库数据写入者,角色成员具有对所有用户表进行增加、删除、修改的权限。

       8)db_denydatareader:数据库拒绝数据读取者,角色成员不能读取数据库中任何表的内容。

       9)db_denydatawriter:数据库拒绝数据写入者,角色成员不能对任何表进行增加、删修、修改操作。

       10)public:是一个特殊的数据库角色,每个数据库用户都是public角色的成员,因此不能将用户、组或角色指派为public角色的成员,也不能删除public角色的成员。public数据库角色默认的权限很少[使用某些系统过程查看并显示master数据库中的信息;执行一些不需要一些权限的语句(例如PRINT)]。

      可以利用系统函数IS_MEMBER检查当前用户是否是数据库角色或Windows域组的成员。

      可以利用系统存储过程sp_helprolemember显示数据库角色的成员。

      可以利用系统存储过程sp_helpuser报告有关当前数据库中数据库级主体的信息。

      可以利用系统存储过程sp_helprotect报告当前数据库中某对象的用户权限或语句权限的信息。

      --查询用户拥有的数据库角色

      useyourdb 

      execsp_helpuser 'UserName'

      go

      --查询用户被赋予的权限

      useyourdb 

      execsp_helprotect @username = 'user name' 

      go

      提示: public固定角色是一个特殊的角色。服务器上的每个登录名都自动成为public服务器角色的成员;每个数据库用户都自动成为public数据库角色的成员。

      public角色不同于其它角色,其权限可以被调整。要了解或修改 public 角色的权限,你可以利用public角色的属性(右击public角色→属性)。

      老版本中,服务器角色中没有有一个public服务器角色,在sql server 2005sp2(补丁)及以后版本,服务器角色中还可以看到一个public服务器角色。

      每个 SQL Server登录名均属于 public服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public角色的权限。public服务器角色拥有 VIEW ANY DATABASE权限。[VIEW ANYDATABASE权限控制是否显示 sys.databases和 sys.sysdatabases视图以及 sp_helpdb系统存储过程中的元数据(metadata)。]

      每个数据库用户都属于 public固定数据库角色。 如果未向某个用户授予或拒绝对安全对象的特定权限时,该用户将继承授予该对象的 public角色的权限。所有的数据库用户都是该角色的成员,并且这是自动的、默认的和不可变的,因此数据库中的所有用户都会自动继承public角色的权限。

      ☆public固定角色与其他固定角色(固定数据库角色、固定数据库角色)的区别:

      可以为 public固定角色实行授予(GRANT)、拒绝(DENY)或撤销(REVOKE)权限(permissions),但不能改变它的成员;而其它固定角色(固定数据库角色、固定数据库角色)的权限无法更改,但可以更改成员。

      ☆ sysadimin角色和db_owner角色的区别

      Sysadmin是固定服务器角色,这个服务器角色的成员有权在SQL Server 2008中执行任何任务。是服务器最大的权限角色。这个角色成员可以忽略对象的拒绝权限。

      db_owner是固定数据库角色,该角色的用户可以在数据库中执行任何操作。是数据库最大的权限角色。对象级的拒绝权限优先于这个角色成员的权限。

      db_owner的作用域(scope)是一个数据库;sysadmin的作用域是整个服务器。db_owner角色中的成员无法授予 dbo用户特权(privileges)。

      (十)自定义数据库角色(也称为标准的数据库角色)

      以Windows系统管理员身份连接SQLServer,创建数据库角色,设置这个角色的权限,然后将数据库用户加入数据库角色。当数据库用户成为某一数据库角色的成员之后,该数据库用户就获得该数据库角色所拥有的对数据库操作的权限。

      (十一)应用程序角色

      应用程序角色是特殊的数据库角色,用于允许用户通过特定应用程序获取特定数据。编写数据库应用程序时,可以定义应用程序角色,让应用程序的操作者能用该应用程序来存取SQL Server的数据。也就是说,应用程序的操作者本身并不需要在 SQL Server上有登录帐号以及用户帐号,仍然可以存取数据库,这样可以避免操作者自行登录SQL Server。

      与其它角色不同,应用程序角色不包含任何成员,而且在使用它们之前要在当前连接中将它们激活。激活一个应用程序角色后,当前连接将丧失它所具备的特定用户权限,只获得应用程序角色所拥有的权限。

      应用程序角色在使用之前必须激活。可以通过执行sp_setapprole系统存储过程来激活应用程序角色。在连接关闭或执行系统存储过程sp_unsetapprole停用应用程序角色并恢复到先前的安全上下文之前,被激活的应用程序角色都将保持激活状态。

      用户将应用程序角色激活后,想回到原来的安全上下文,需要终止当前连接重新登录,或执行系统存储过程sp_unsetapprole停用应用程序角色并恢复到先前的安全上下文。

      提示:

      应用程序角色只能应用于它所在的数据库,若要访问其它数据库,只能通过其它数据库中的guest用户账号的权限来访问,如果在其它数据库中没有或禁用guest用户账号的话,就不能访问该数据库。

      (十二)DENY(拒绝)、 GRANT (授予)、REVOKE(撤销,取消;废除)

      GRANT表示允许主体对于安全对象做某些操作,DENY表示不允许主体对某些安全对象做某些操作。还有一个REVOKE语句用于收回先前对主体GRANT或DENY的权限。在设置权限时,尤其要注意权限在安全对象上的继承关系。对于父安全对象上设置的权限,会被自动继承到子安全对象上。

       DENY(拒绝)权限优先,但不适用sysadmin角色的成员,以及登录名sa、用户dbo。DENY优先于所有的权限(all permissions),只是 DENY不适用于对象所有者(object owners)或 sysadmin的成员。如果您针对 public角色对某个对象执行 DENY权限语句,则会拒绝该对象的所有者和 sysadmin成员以外的所有用户和角色访问该对象。在高层级上的DENY会覆盖任何子层级的GRANT。

       GRANT(授予)权限将删除对所指定安全对象的相应权限的 DENY或 REVOKE权限。如果在包含该安全对象的更高级别拒绝了相同的权限,则 DENY优先。但是,在更高级别撤消已授予权限的操作并不优先。

       REVOKE(撤销,取消;废除)废除类似于拒绝,但是,废除权限是删除已授予的权限,并不妨碍用户、组或角色从更高级别继承已授予的权限。因此,如果废除用户查看表的权限,不一定能防止用户查看该表,因为可能已将查看该表的权限授予了用户所属的角色。

      表级 DENY并不优先于列级 GRANT,列级权限的 GRANT覆盖对象级的 DENY。

      无法对 sa登录、dbo用户、实体所有者、information_schema用户、sys用户或您自己授予、拒绝或撤消权限。

      授给对象的权限与服务器和数据库角色相互影响,理解权限的继承和权限的覆盖会在设置权限时减少很多问题。最佳方法是上机实践验证。

      提示:要正确理解“在高层级上的DENY会覆盖任何子层级的GRANT”和“表级 DENY 并不优先于列级 GRANT”。

      (十三)master系统数据库

      1.记录 SQL Server系统的所有系统级信息。这包括实例范围的元数据(例如登录帐户)、端点、链接服务器和系统配置设置。

      2.master数据库还记录了所有其他数据库的存在、数据库文件的位置以及 SQL Server 的初始化信息。

      执行下列操作后,尽快备份 master数据库:

       ⊙创建、修改或删除任意数据库

       ⊙更改服务器或数据库的配置值

       ⊙修改或添加登录帐户

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/cnds123/article/details/46678317,作者:软件开发技术爱好者,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:数据库系统模式(schema)和模型(model)详解

      下一篇:MySQL的系统数据库介绍

      相关文章

      2025-05-19 09:05:01

      项目更新到公网服务器的操作步骤

      项目更新到公网服务器的操作步骤

      2025-05-19 09:05:01
      公网 , 数据库 , 文件 , 更新 , 服务器
      2025-05-19 09:04:53

      Django rest froamwork-ModelSerializer

      Django rest froamwork-ModelSerializer

      2025-05-19 09:04:53
      django , sqlite , 数据库
      2025-05-19 09:04:44

      FinalShell 配置SSH密钥登陆

      FinalShell 配置SSH密钥登陆

      2025-05-19 09:04:44
      密钥 , 服务器 , 配置
      2025-05-19 09:04:38

      mysql只有在任务处于完成状态才能运行

      mysql只有在任务处于完成状态才能运行

      2025-05-19 09:04:38
      MySQL , 任务 , 数据库 , 查询 , 状态
      2025-05-19 09:04:30

      设置28401事件后启动数据库时报错ORA-49100

      设置28401事件后启动数据库时报错ORA-49100

      2025-05-19 09:04:30
      ORA , 数据库 , 时报
      2025-05-14 10:33:16

      30天拿下Python之使用网络

      Python网络编程覆盖的范围非常广,包括:套接字编程、socketserver、HTTP和Web开发、异步编程和asyncio等。

      2025-05-14 10:33:16
      Json , TCP , 客户端 , 接字 , 服务器 , 示例 , 连接
      2025-05-14 10:03:13

      MySQL 索引优化以及慢查询优化

      MySQL 是一种广泛使用的关系型数据库管理系统,因其性能优异和使用便捷而备受欢迎。然而,随着数据量的增长和查询复杂度的增加,性能瓶颈也变得越来越明显。

      2025-05-14 10:03:13
      MySQL , 优化 , 使用 , 性能 , 数据库 , 查询 , 索引
      2025-05-14 10:03:13

      【Mybatis】-防止SQL注入

      【Mybatis】-防止SQL注入

      2025-05-14 10:03:13
      SQL , 执行 , 日志 , 注入 , 缓存 , 编译 , 语句
      2025-05-14 10:03:13

      【Mybatis】-动态SQL

      【Mybatis】-动态SQL

      2025-05-14 10:03:13
      include , set , sql , SQL , 条件 , 标签
      2025-05-14 10:03:05

      Oracle数据库用户权限分析

      Oracle数据库用户权限分析

      2025-05-14 10:03:05
      Oracle , 分析 , 数据库 , 权限 , 用户
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5255044

      查看更多

      最新文章

      项目更新到公网服务器的操作步骤

      2025-05-19 09:05:01

      FinalShell 配置SSH密钥登陆

      2025-05-19 09:04:44

      SQL Server 事务日志体系结构1--基本术语

      2025-05-14 10:02:48

      MySQL-备份+日志:介质故障与数据库恢复

      2025-05-08 09:04:49

      redis高可用集群搭建

      2025-05-06 09:19:12

      基于javaWeb+jsp人力资源管理系统(含文档)

      2025-05-06 09:19:00

      查看更多

      热门文章

      Linux运维小技巧---每日收集所有服务器信息并归档到指定服务器

      2023-03-16 07:49:58

      用ftp服务器进行yum源的设置

      2023-04-21 03:04:35

      Confluence 6 配置服务器基础地址

      2023-04-23 09:34:48

      linux中常见工具安装问题集锦

      2023-05-05 10:12:49

      linux环境日志排查,cat命令关键字查找、最近1000条、定位到指定位置

      2022-12-28 07:22:30

      在 ubuntu 中安装 Apache 2 Web 服务器

      2023-05-22 08:06:30

      查看更多

      热门标签

      服务器 linux 虚拟机 Linux 数据库 运维 网络 日志 数据恢复 java python 配置 nginx centos mysql
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      Linux命令之查看登录用户列表users

      Maven 服务器如何设置用户名和密码

      【Tableau Server 企业日常问题 24】Tableau server提示工具嵌入工作表,服务器字体乱码问题解决

      【手写Tomcat】5.实现自己定义的MyHttpRequest

      高防服务器的工作原理

      Linux系统中运行.sh文件的几种方法

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号