位置: 编程技术 - 正文

sql server 2005用户权限设置深入分析(sql server single user)

编辑:rootadmin
关于什么是用户权限,最简单的定义可能是,“用户能做什么和不能做什么。”在这里,简单的定义就相当不错了。 用户的权限分为3类: l 登录的权限; l 访问特定数据库的权限; l 在数据库中具体的对象上执行特定操作的权限。 既然我们已经看过了创建登录账户,这里将把重点放在登录账户能够拥有的特定权限上。 .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。 .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-兼容性外没有实际的功能。 ON关键字用作一个占位符,以说明接下来的是想要授予其权限的对象。注意,如果你是在表上授予权限,可以通过明确说明受影响的列的列表来指定下至列级的权限——如果不提供具体的列,则认为将影响所有的列。 在对列级权限的看法 上,微软似乎做的是些表面的事情。能够说一个用户可以在特定的表上进行SELECT,但仅限于在该表中特定的列上进行SELECT,这似乎很酷,然而,在 列级权限的使用中以及微软为实现列级权限所做的工作中,确实让安全性处理太过错综复杂了。鉴于此,近来关于该主题的文献,以及我从内部人士那里得到的消 息,似乎都表明微软想要丢弃列级安全性了。在使用上他们建议——如果需要限制用户只能看到特定的列,请改为考虑使用视图。 TO语句所做的事情正如你期望的那样——它指定想要把该访问权限授予谁。被授予权限的可以是登录ID或角色名。 WITH GRANT OPTION允许你向其授予访问权限的用户也能向其他用户授予访问权限。 由于使用该选项 后,要了解谁获得了访问什么的权限,将很快变得十分痛苦,因此,我建议避免使用该选项。当然,你总是可以进入到Management Studio中来查看对象上的权限,但那是被动反应的方式而非积极主动的方式——你是在查找当前访问级别上哪里出错了,而不是事先停止不希望发生的访问。 最后,但并非最不重要的,是AS关键字。该关键字处理的是一个登录名属于多个角色的问题。 接下来,我们来看一、两个例子。后面将看到,我们已 经创建的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-兼容性外没有任何实际的功能。 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-兼容性外,依然没有任何实际的作用。 ON关键字用作一个占位符,以说明接下来的是想要撤销其权限的对象。 CASCADE关键字与GRANT语句中的WITH GRANT OPTION相对应。CASCADE告诉SQL Server,如果用户在WITH GRANT OPTION规则下授予了其他人访问权限,则对于所有这些被授予权限的人,也将撤销他们的访问权限。 同样,AS关键字只是用来说明想要基于哪个角色发出这一命令。 我们使用sa连接,撤销授予的到NorthwindSecure中的Region表的访问权限。 执行完该语句后,TestAccount将不能再在Region表上运行SELECT语句。 为了撤销DENY,我们同样也发出一个REVOKE语句。这一次,将重新获得到Employees表的访问权限: 现在,我们已经了解所有这些命令是如何针对单个用户来控制访问权限的,接下来,看这样一种方法,该方法通过分组管理来极大简化对这些权限的管理。 .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。 到现在为止,除了两个备份命令外,其他所有的这些命令我们都已经在操作中见过了。(备份命令要做什么是不言自明的,因此,眼下不准备在这上面花费时间,我们将在第章中讨论它们——只需记住,它们是你能够在语句级别进行控制的东西。) 那么,我们如何指派这些许可权限呢?实际上,现在你 已经见过GRANT、REVOKE和DENY针对对象的运作,那么,在语句级别的许可权限上你也已经有了相当的了解。从语法构成上说,它们与对象级别的许 可权限基本相同,除了它们更加简单(你不必填入那样多的东西)。其语法如下: GRANT <ALL | 语句[,...n]> TO <登录 ID>[,...n] 很简单吧?接下来,通过验证我们的测试用户尚没有权力执行CREATE,以进行一次快速的试验。确保以TestAccount登录,然后,运行下面的命令(在下面的语句中,不要忘记把ARISTOTLE转换到你的域名): 我们运行上面的命令是完全行不通的: 现在,使用sa账户(或者其他具有NorthwindSecure的dbo权力的账户)登录到SQL Server中。然后,运行命令以授予许可权限: 你会得到命令成功执行的确认消息。然后,再次尝试运行CREATE语句(记住使用TestAccount登录): 这一次一切顺利。 在对象级别的许可权限上,DENY和REVOKE也以同样的方式工作。

推荐整理分享sql server 2005用户权限设置深入分析(sql server single user),希望有所帮助,仅作参考,欢迎阅读内容。

sql server 2005用户权限设置深入分析(sql server single user)

文章相关热门搜索词:sql server常用用户名,sql server user,sql server user,sqlserver 5用户什么意思,sql server账户,sqlserver 5用户什么意思,sql server账户,sql server user,内容如对您有帮助,希望把文章链接给更多的朋友!

mssql数据库镜像搭建教程 一概述数据库镜像是SQLSERVER用于提高数据库可用性的新技术。数据库镜像将事务日志记录直接从一台服务器传输到另一台服务器,并且能够在出现故

SQL Server DTS导入平面数据出现错误解决方案 SQLServerDTS导入平面数据源时,总是被截断,无法执行的错误解决方案1典型的错误信息如下:消息*错误0xca1:数据流任务:数据转换失败。列列2的数

sql 日志清理 SQL压缩清除日志的方法 教你如何清除SQL日志1.打开查询分析器,输入命令DUMPTRANSACTION数据库名WITHNO_LOG2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收

标签: sql server single user

本文链接地址:https://www.jiuchutong.com/biancheng/319387.html 转载请保留说明!

上一篇:sql2005 数据库转为sql2000数据库的方法(数据导出导入)(sql数据库转换mysql)

下一篇:mssql2005数据库镜像搭建教程(数据库镜像是什么意思)

  • 软件企业会计科目分类
  • 国有企业投资方式
  • 对公户取备用金怎么取
  • 2019年计算机软件行业人均年工资
  • 以合并方式成立的新企业,新启用
  • 扣除工资作为违约金
  • 公司将我转到另外一家公司
  • 事业单位收到增资款
  • 税务局会限制每月交税吗
  • 租赁厂房算什么费用
  • 土地房产税征收范围
  • 如何确定增值税以旧换新方式下销售货物的销售额
  • 文化事业建设税征税范围
  • 股东分红纳入社会保险吗
  • 车辆购置税计税价格含增值税吗
  • 公账转私账怎么操作电脑版
  • 企业年金个税如何计提
  • 已交税金怎么做账
  • 登记变更是什么意思
  • 季度报税过了怎么办
  • 商铺土地增值税清算
  • 价款包括增值税税率吗
  • 新会计制度下如何做账
  • 发票如何认证及开票
  • avsched32.exe是什么进程 avsched32进程有什么作用
  • 以前年度损益调整结转到哪里
  • 发票的概念
  • 个体工商户需要年审吗
  • Linux怎么修改账户名
  • MAC OS X Yosemite开启深色模式的方法
  • 多源传感器融合
  • 预缴企业所得税怎么做账务处理
  • php自定义函数的关键字是什么
  • json postman
  • 中小微企业社保补贴
  • vue项目页面跳转
  • web渗透违法吗
  • 用jsp实现用户登录验证
  • 笨办法学python 3电子书下载
  • 招待费超出部分的分录
  • 转出未交增值税怎么算
  • 开具电费发票如何入账
  • 员工工资计提
  • 社保员工全额承担怎么写分录
  • 子公司和分公司的区别
  • 党建经费提取是上年度还是下年
  • sql查询必须在什么的基础上创建
  • 新准则下开办费摊销
  • 税控服务费全额抵扣申报怎么填
  • 汇算清缴纳税调整需要做账吗
  • 长期待摊费用好处
  • 关于预付账款的说法正确的有
  • 外埠存款会计分录怎么写
  • 工程施工人工费,材料费,机械费占多少比例
  • 垃圾处理费计提依据
  • 分公司内部管理模式
  • 锅炉设备销售
  • 记账凭证负数怎么填写样板
  • 伤病假条
  • mysql where clause
  • sql多表连接查询(详细实例)
  • mac怎么玩电脑游戏
  • iphone制造成本
  • mac 特殊符号
  • dwm22.exe病毒
  • win7系统点击计算机图标未响应
  • opengl入门教程(精)
  • bat脚本如何运行
  • jquery开发
  • js设置标签内容
  • 搭建nodejs项目
  • python编码大全
  • Vuforia How To Use Android Plugins in Unity Apps
  • 手游 unity
  • 方块大作战百科
  • js怎么判断日期大小
  • 保险理赔款如何分配
  • 其他收入工会经费必须申报吗
  • 安徽省税务干部学校
  • 税务备案表付汇日期是否可以提前
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设