当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-04-11 23:04:00  来源:本站整理

<b>sql server2005用户权限设置</b>[MSSQL防范]

赞助商链接



  本文“<b>sql server2005用户权限设置</b>[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

关于什么是用户权限,最简单的定义大概是,“用户能做什么和不能做什么.”在这里,简单的定义就相当不错了.

用户的权限分为3类:

l 登录的权限;

l 拜候特定数据库的权限;

l 在数据库中具体的对象上履行特定操作的权限.

既然我们已经看过了成立登录账户,这里将把重点放在登录账户可以拥有的特定权限上.

22.3.1 授与拜候特定数据库的权限

假如想要一个用户可以拜候数据库,你需求做的第一件事情是授与用户拜候那个数据库的权限.可以在Management Studio中,通过把用户加入到服务器的数据库结点的用户成员中来实现.假如要用T-SQL来增添用户,需求利用CREATE USER或遗留的存储历程sp_grantdbaccess.

注意,当你在数据库中CREATE一个用户时,实际上,那些答应权限被存储在数据库中,并映射到那个用户的服务器标识符上.当复原数据库时,大概不得不在复原数据库的地方,重新把用户权限映射到服务器标识符.

1.CREATE USER

CREATE USER号令把新用户增添到数据库中.用户可以源自现有的登录名、证书或非对称密钥,用户也可以是只能在当前数据库中的本地用户.其语法以下:

CREATE USER <用户名>

[ { { FOR | FROM }

{

LOGIN <登录名>

| CERTIFICATE <证书名>

| ASYMMETRIC KEY <密钥名>

}

| WITHOUT LOGIN ]

[ WITH DEFAULT_SCHEMA = <情势名> ]

关于这些元素,我们大要看一下此中一些元素的含义是什么:

选  项
说  明

LOGIN
想要授与拜候当前数据库的权限的登录名

CERTIFICATE
与用户关联的证书的逻辑名称.注意,必须已经利用CREATE CERTIFICATE号令成立了证书

ASYMMETRIC KEY
与用户关联的非对称密钥的逻辑名称.注意,必须已经利用CREATE ASYMMETRIC KEY号令成立了密钥

WITHOUT LOGIN
成立只能在当前数据库中活动的用户.可以用它来成立特定的安全上下文,但是,该用户不能映射到当前数据库之外的登录名,也不能拜候任何其他的数据库

WITH DEFAULT_SCHEMA
设立不是默许的“dbo”的情势,以作为当前用户的默许情势


2.sp_grantdbaccess

这是遗留的办法,用来授与登录名到特定数据库的拜候权限.其语法以下:

sp_grantdbaccess [@loginame =] <'登录名'>[, [@name_in_db =] <'数据库中的别名'>

注意,授与的是当前数据库的拜候权限——便是说,你 必须确保想要用户可以拜候的数据库是发出该号令时的当前数据库.登录名是用来登录到SQL Server中的实际的登录ID.参数name_in_db答应给该用户别的的辨认名称.这个体名只实用于此处的数据库——其他全部的数据库仍将利用该登 录ID的默许名称,大概利用在授与用户那个数据库的拜候权限时所定义的别名.定义别名将影响身份辨认函数,如USER_NAME().系统级别的函数(如 SYSTEM_USER)将返回底子的登录ID.

22.3.2 授与数据库中对象的权限

好吧,用户拥有了登录名,并且,可以拜候你想要他或她可以拜候的数据库,那么,能否目前就万事大吉了呢?假如事情真有那么简单就行了!目前当然还没有一切就绪.

在用户可以拜候什么的问题上,SQL Server给了我们级别相当精密的掌握.大都时刻,一些信息是但愿用户可以拜候到的,但是,数据库中也有另一些信息是不但愿用户拜候的.比方,你大概想 要客户服务人员可以查看和保护订单信息,但是大概不但愿他们乱看工资信息.大概,反之亦然——你需求人力资源人员可以编辑雇员记录,但是,大概不想要他们 在交易上给某人很大的折扣.

SQL Server答应你给SQL Server中一些差别的对象指派一组差别的权限.可认为其指派权限的对象包含表、视图和存储历程.触发器隐含具有成立它们的人的权限.

对象上的用户权限分为6种差别的范例.

用户权限
说  明

SELECT
答应用户“看到”数据.假如用户拥有该权限,则用户可以在其被授与权限的表或视图上运行SELECT语句

INSERT
答应用户成立新的数据.具有这种权限的用户可以运行INSERT语句.注意,与很多系统差别,具有INSERT本领并不一定意味着拥有SELECT权限

UPDATE
答应用户改正已有的数据.具有这种权限的用户可以运行UPDATE语句.近似于INSERT语句,具有UPDATE本领并不一定意味着拥有SELECT权限.

DELETE
答应用户删除数据.具有这种权限的用户可以运行DELETE语句.一样,具有DELETE本领不一定意味着拥有SELECT权限

REFERENCES
在要插入行的表中有引用另一个表的外键约束,而用户在那个表上没有SELECT权限,REFERENCES权限答应用户插入行

EXECUTE
答应用户EXECUTE指定的存储历程


在你正在把权限指定到其上的特定的表、视图或存储历程中,可以在需求时混合搭配这些权限.

可以在Management Studio中指派这些权限,你只需导航到服务器的“安全性”结点的“登录名”选项上.在用户上右击,并挑选“属性”.按照你是在数据库中还是在安全性结 点中,翻开的对话框将有所差别,但是,无论哪一种情形,都可以得到设置权限的选项.利用T-SQL指派权限会利用三个号令,理解这三个号令是有益的,即便 你只预备通过Management Studio来指派权限(术语是相同的).

1.GRANT

GRANT把对象上指定的拜候权限赐与指定的用户或角色,对象是GRANT语句的主体.

GRANT语句的语法以下所示:

GRANT

ALL [PRIVILEGES] | <权限>[,...n]

ON

<表名或视图名>[(<列名>[,...n])]

|<存储历程或扩大存储历程名>

TO <登录ID或角色名>[,...n]

[WITH GRANT OPTION]

[AS <角色名>]
ALL关键字表示你想要授与的是实用于那个对象范例的全部权限(EXECUTE毫不实用于表).假如不利用ALL关键字,则需求供应一个或多个具体的权限,这些具体的权限是针对那个对象想要授与的.

PRIVILEGES是一个新的关键字,它除了供应ANSI-92兼容性外没有实际的功效.

ON关键字用作一个占位符,以阐明接下来的是想要授与其权限的对象.注意,假如你是在表上授与权限,可以通过明确阐明受影响的列的列表来指定下至列级的权限——假如不供应具体的列,则认为将影响全部的列.

在对列级权限的见解 上,微软仿佛做的是些表面的事情.可以说一个用户可以在特定的表上举行SELECT,但仅限于在该表中特定的列上举行SELECT,这仿佛很酷,但是,在 列级权限的利用中以及微软为实现列级权限所做的工作中,确切让安全性处理太过扑朔迷离了.鉴于此,近来关于该主题的文献,以及我从内部人士那边得到的消 息,仿佛都表明微软想要丢弃列级安全性了.在利用上他们倡议——假如需求限制用户只能看到特定的列,请改成考虑利用视图.

TO语句所做的事情正如你盼望的那样——它指定想要把该拜候权限授与谁.被授与权限的可以是登录ID或角色名.

WITH GRANT OPTION答应你向其授与拜候权限的用户也能向其他用户授与拜候权限.

由于利用该选项 后,要理解谁得到了拜候什么的权限,将很快变得非常痛楚,因此,我倡议避免利用该选项.当然,你老是可以进入到Management Studio中来查看对象上的权限,但那是被动反映的方法而非主动主动的方法——你是在查找当前拜候级别上那边出错了,而不是事前终止不但愿发生的拜候.

最后,但并非最不重要的,是AS关键字.该关键字处理的是一个登录名属于多个角色的问题.

接下来,我们来看1、两个例子.背面将看到,我们已 经成立的TestAccount账户,基于其是Public角色(全部的数据库用户都属于的东西,并且,无法从中移除)中的成员而拥有了一些拜候权限.然 而,另有大量的项目是TestAccount不具有拜候权限的(由于Public是TestAccount唯一属于的角色,因此,Public也不具有那 些权限).

先从以TestAccount用户登录开始.然后在Region表上尝试一个SELECT语句:

很快,你将收到来自SQL Server的消息,奉告:你正在尝试去到你所不该该拜候的地方.

单独以sa登录——假如你乐意,也可以在同一个查询编辑器实例中,通过挑选菜单“文件”→“衔接”,来完成这件事情.然后,为新的衔接挑选“SQL Server身份考证”,并用精确的密码以sa身份登录.目前,履行GRANT语句:

接着,切换回TestAccount衔接(要记着,以什么用户举行衔接的信息显示在衔接窗口的标题栏中),然后,再尝试履行SELECT语句:这一次,得到了好得多的后果:

我们持续尝试别的的语句.这一次,我们在EmployeeTerritories表上运行相同的测试和号令:

该语句履行失利——这一样是由于你不具有呼应的权限所致,因此,授与用户该表上的权限:

然后,再次运行SELECT语句,一切进展顺利:

不过,若要再增添一点改变,尝试在这个表中履行INSERT:

SQL Server当即会让我们走开——我们不具有必要的权限,因此,授与用户呼应的权限(利用sa衔接):

目前,再次运行INSERT语句:

一切进展顺利.

2.DENY

DENY明确禁止用户得到目标对象上指定的拜候 权限.DENY的关键所在是,它将覆盖任何GRANT语句.由于用户可以属于多个角色(即刻将对此举行谈论),因此,一个用户大概属于被授与了拜候权限的 角色,但同时又受DENY的影响.假如用户个人的权限和基于角色成员身份所得到的权限混合在一同,DENY和GRANT同时存在于此中,那么DENY老是 优先的.简言之,假如用户或用户所属的任何角色在权限问题上有DENY呈现,则用户将不能利用在那个对象上的拜候权限.

其语法很复杂繁多,看上去与GRANT语句一样:

DENY

ALL [PRIVILEGES]|<权限>[,...n]

ON

<表名或视图名>[(列名[,...n])]

|<存储历程或扩大存储历程名>

TO <登录ID或角色名>[,...n]

[CASCADE]

一样,ALL关键字表明,想要回绝授与该对象范例上全部可用的权限(EXECUTE毫不实用于表).假如不利用ALL关键字,则需求供应一个或多个具体的权限,这些具体的权限是针对想要回绝授与权限的对象的.

PRIVILEGES仍然是新关键字,并且,除了供应ANSI-92兼容性外没有任何实际的功效.

ON关键字用作一个占位符,以阐明接下来的是想要回绝授与其权限的对象.

到此为止,全部的事情都与GRANT语句几近一样. CASCADE关键字与GRANT语句中的WITH GRANT OPTION相对应.CASCADE奉告SQL Server,假如用户在WITH GRANT OPTION法则下授与了其他人拜候权限,则关于全部这些人,也回绝他们的拜候.

为了在DENY上运行一个例子,我们利用TestAccount登录名尝试履行一个简单的SELECT语句:

运行该语句后,将返回大约9条记录.在我们不曾授与TestAccount该权限时,它是若何得到拜候权限的呢?缘由是,TestAccount属于Public,而Public被授与了Employees上的拜候权限.

假定我们不但愿TestAccount可以拜候Employees.无论什么缘由,TestAccount是一个例外,并且我们不但愿该用户查看那些数据——我们只需发出DENY语句(记着要利用sa登录名来运行DENY):

当再次用TestAccount登录名运行SELECT语句时,将得到一个错误——你不再可以拜候.此外还要注意,由于我们利用了ALL关键字,因此,也回绝将Public所拥有的INSERT、DELETE和UPDATE拜候权限授与TestAccount.

注意,DENY是SQL Server 7.0中新增的语句.在6.5版本中有回绝授与权限的概念,但是,其实现方法是差别的.在6.5版中,不是利用DENY,而是发出两次REVOKE语句.新的DENY关键字让事情越发清楚明了.

3.REVOKE
REVOKE将消除从前发出的GRANT或DENY语句的影响.可以把该语句想成是有针对性的“撤消”语句.

REVOKE的语法混合了GRANT和DENY语句:

REVOKE [GRANT OPTION FOR]

ALL [PRIVILEGES] | <权限>[,...n]

ON

<表名或视图名>[(列名 [,...n])]

|<存储历程或扩大存储历程名>

TO | FROM <登录ID或角色名>[,...n]

[CASCADE]

[AS <角色名>]

实际上,这里要做的阐明与对GRANT和DENY语句的阐明相同——但是,我将在这里再次报告,免得你为了快速查找有关REVOKE的阐明而向前翻阅本书.

一样,ALL关键字表明,想要撤消在该对象范例上全部可用的权限.假如不利用ALL关键字,则需求供应一个或多个具体的权限,这些具体的权限是针对那个对象想要撤消的权限.

PRIVILEGES除了供应ANSI-92兼容性外,仍然没有任何实际的作用.

ON关键字用作一个占位符,以阐明接下来的是想要撤消其权限的对象.

CASCADE关键字与GRANT语句中的WITH GRANT OPTION相对应.CASCADE奉告SQL Server,假如用户在WITH GRANT OPTION法则下授与了其他人拜候权限,则关于全部这些被授与权限的人,也将撤消他们的拜候权限.

一样,AS关键字只是用来阐明想要基于哪个角色发出这一号令.

我们利用sa衔接,撤消授与的到NorthwindSecure中的Region表的拜候权限.

履行完该语句后,TestAccount将不能再在Region表上运行SELECT语句.

为了撤消DENY,我们一样也发出一个REVOKE语句.这一次,将重新获得到Employees表的拜候权限:

目前,我们已经理解全部这些号令是若何针对单个用户来掌握拜候权限的,接下来,看这样一种办法,该办法通过度组管理来极大简化对这些权限的管理.

22.3.3 用户权限和语句级别的答应

用户答应权限并不但仅范围于数据库中的对象上——它们也能扩大到某些其他的语句,这些语句不直接与任何特定的对象约束在一同.SQL Server答应你对运行几种差别的语句的答应权限举行掌握,这些语句包含:

l CREATE DATABASE;

l CREATE DEFAULT;

l CREATE PROCEDURE;

l CREATE RULE;

l CREATE TABLE;

l CREATE VIEW;

l BACKUP DATABASE;

l BACKUP LOG.

到目前为止,除了两个备份号令外,其他全部的这些号令我们都已经在操作中见过了.(备份号令要做什么是不言自明的,因此,眼下不预备在这上面耗费时间,我们将在第24章中谈论它们——只需记着,它们是你可以在语句级别举行掌握的东西.)

那么,我们若何指派这些答应权限呢?实际上,目前你 已经见过GRANT、REVOKE和DENY针对对象的运作,那么,在语句级别的答应权限上你也已经有了相当的理解.从语法构成上说,它们与对象级别的许 可权限基本相同,除了它们越发简单(你没必要填入那样多的东西).其语法以下:

GRANT <ALL | 语句[,...n]> TO <登录 ID>[,...n]

很简单吧?接下来,通过考证我们的测试用户尚没有权利履行CREATE,以举行一次快速的试验.确保以TestAccount登录,然后,运行下面的号令(在下面的语句中,不要忘掉把ARISTOTLE转换到你的域名):

我们运行上面的号令是完好行不通的:

目前,利用sa账户(大概其他具有NorthwindSecure的dbo权利的账户)登录到SQL Server中.然后,运行号令以授与答应权限:

你会得到号令成功履行的确认消息.然后,再次尝试运行CREATE语句(记着利用TestAccount登录):

这一次一切顺利.

在对象级别的答应权限上,DENY和REVOKE也以一样的方法工作.   以上是“<b>sql server2005用户权限设置</b>[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .