Chapter 3 Protecting the Data(1):理解权限,chapterprotecting
原文出处:http://blog.csdn.net/dba_huangzj/article/details/39548665,专题目录:http://blog.csdn.net/dba_huangzj/article/details/37906349未经作者同意,任何人不得以“原创”形式发布,也不得已用于商业用途,本人不负责任何法律责任。
前一篇:http://blog.csdn.net/dba_huangzj/article/details/39496517
前言:
关系型数据库管理系统(RDBMS),如SQL Server、Oracle、Mysql等,不仅仅需要负责存取数据,也要负责确保数据的一致性和安全性。类似于其他服务器系统,通过授权给一个用户并维护这个用户的会话来控制数据的访问行为。每当尝试读写数据时,SQL Server都会检查这些权限。首先,先了解一些概念:
Permissions:权限,在安全主体层面授权,这些安全主体包含:登录名、数据库用户、角色等。所有这些对象都可以被grant/deny/revok权限。简称GDR(GRANT,DENY,REVOKE)。接受权限的主体称为接受者(Grantee),设置权限的帐号成为授予者(Grantor)。
权限可以使用GRANT选项授予,权限属于Data Control Language(DCL)命令,独立于DML/DDL。基本语法如下:
<GRANT | REVOKE | DENY> ON <class of securable>::<securable> TO <principal>;
权限的3种状态为:
- GRANT: 权限被允许
- DENY:权限被显式拒绝(优先级高于GRANT)
- REVOKE:消除GRANT/DENY的影响,等于移除权限。
实现:
可以使用下面语句查看可被授予的权限:
-- 所有返回内置权限的完整列表
SELECT * FROM sys.fn_builtin_permissions(DEFAULT);
--返回特定类别,如Schema的权限 :
SELECT * FROM sys.fn_builtin_permissions('SCHEMA');本机结果如下:
第一列是安全主体的类别,即权限应用在这个类别上。permission_name和type用于描述权限,type通常是权限的简写。covering_permission_name列,如果不为 NULL,则为该类的权限名称(隐含该类的其他权限)。比如截图中第一行,CREATE TABLE权限意味着需要有ALTER DATABASE权限。parent_class_desc(
如果不为 NULL,则为包含当前类的父类的名称。)和Parent_covering_permission_name(如果不为 NULL,则为父类的权限名称(隐含该类的所有其他权限)。),具体解释可以查看联机丛书。
下面是一些GRANT权限的例子:
-- 授权给bill这个数据库用户,让其拥有对Accounting.Account 表有SELECT的权限 GRANT SELECT ON object::Accounting.Account TO Bill; -- 授权给bill这个数据库用户,可以执行Accounting架构中的所有存储过程和标量函数 GRANT EXECUTE ON schema::Accounting TO bill; --授权给用户自定义角色AvailabilityManager,让其拥有修改服务器上可用性组的权限 GRANT ALTER ANY AVAILABILITY GROUP TO AvailabilityManager;
如果需要回收权限,可以使用REVOKE命令:
REVOKE SELECT ON object::Accounting.Account TO Fred;
如果需要显式禁止,可以使用DENY命令:
DENY SELECT ON object::Accounting.Account TO Fred;
当deny之后,如果用户需要运行已被deny的操作,会报出229错误,这个错误是对象上的权限被禁止,但是由于其暴露了信息(如xx对象被禁止,意味着xx对象是存在的),给了攻击者一些感兴趣的信息。而错误208表示尝试访问一个不存在的对象。
原理:
下面是最常用的权限:
| 权限名 | 描述 |
| ALTER | 修改对象定义的权限 |
| CONNECT | 访问数据库或连接端点的权限 |
| DELETE | 删除对象的权限 |
| EXECUTE | 执行存储过程或函数的权限 |
| IMPERSONATE | 等价于EXECUTE AS命令 |
| INSERT | 插入数据到表或视图的权限 |
| REFERENCES | 在外键定义或者在视图使用了WITH SCHEMABINDING中应用对象的权限 |
| SELECT | 能够在对象或者列上执行SELECT命令 |
| TAKE OWNERSHIP | 成为对象的拥有者的权限 |
| UPDATE | 更新数据的权限 |
| VIEW DEFINITION | 查看对象定义的权限 |
例子:
DENY SELECT ON OBJECT::dbo.Contact TO Fred;--禁止Fred查询dbo.contact表的数据 DENY UPDATE ON OBJECT::dbo.Contact TO Fred;--Fred更新dbo.contact表的数据 GRANT SELECT ON OBJECT::dbo.Contact TO Fred;--授权Fred查询dbo.contact表的数据
注意,GRANT ALL虽然存在,但是在后续会被弃用。REVOKE命令可以移除GRANT的效果,不要使用DENY命令来移除命令,除非你确定这个用户不在需要访问这个对象。DENY命令会覆盖所有GRANT命令。
登录名可以被GRANT/DENY在架构或者对象级别,比如
DENY SELECT ON Accounting.Account TO dbo;
CONTROL权限包含了安全实体上的其他权限,如果DENY了SELECT权限,然后又GRANT了CONTROL权限,那么deny权限会被回收。由于SQL Server的权限检查算法和复杂,所以最好保持权限策略的简单性。SQL Server对象权限的层级及传输示意图:
更多:
如果需要测试当前用户的权限,恶意使用HAS_PERMS_BY_NAME函数,如果返回1,则证明权限被授予:
--是否有对dbo架构有select权限?
SELECT HAS_PERMS_BY_NAME('dbo', 'SCHEMA', 'SELECT');
--检查服务器层面的所有权限
SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');使用下面语句获取已授予的权限列表:
-- 当前用户在dbo架构上有什么权限?
SELECT * FROM sys.fn_my_permissions('dbo', 'SCHEMA');
--服务器所有权限
SELECT * FROM sys.fn_my_permissions(null, null);服务器权限记录在sys.server_permissions系统视图,数据库权限存放在每个数据库的sys.database_permissions系统视图。可以查看dbo.prospect表上的权限集合:
SELECT grantee.name AS grantee ,
grantor.name ,
dp.permission_name AS permission ,
dp.state_desc AS state
FROM sys.database_permissions dp
JOIN sys.database_principals grantee ON dp.grantee_principal_id = grantee.principal_id
JOIN sys.database_principals grantor ON dp.grantor_principal_id = grantor.principal_id
WHERE dp.major_id = OBJECT_ID('dbo.prospect');
WITH GRANT OPTION工作原理:
意味着被授权的主体能把相同或者少于当前权限的权限授予给其他主体。比如
GRANT SELECT ON OBJECT::dbo.contact TO fred WITH GRANT OPTION;
这个授予了Fred有两个权限,一个是SELECT,一个是GRANT SELECT,可以回收除了SELECT之外的其他权限:
REVOKE SELECT ON OBJECT::dbo.contact TO fred CASCADE; GRANT SELECT ON OBJECT::dbo.contact TO fred;
这两个语句就是先回收所有权限,然后仅赋予SELECT,加上CASCADE的含义是把Fred曾经授权给其他主体的SELECT权限一并收回。
REFERENCE权限:
这个权限不仅仅作用域表,还可以作用于数据库、架构等主体。REFERENCE在表中允许创建外键约束,在视图中可以用于WITH SCHEMABINDING 所影响的表的引用。
下一篇:
期中复习 (3)选择填空 Chapters 1--4
1.--- Do you know when Mr. Green will come? ( C 1-2)
--- Sorry, I have no idea. But if he _____, I will call you.
A. come B. comes C. will come D. has come
2.---Why was the old man so angry _____ his wife?
---Because his wife never visited him _____ hospital.
A. at; at B. with; in C. at; in D. with; at
3.--- My television ______ wrong. What shall I do with it?
--- I suggest _____ it repaired.
A. goes; to get B. becomes; getting C. goes; getting D. gets; to get
4.If you invite me, I ______ to your party.
A. will go B. would go C. go D. goes
5.---Why didn’t you hand in your exercise book, Tom?
--- I remember _____ it to you just now.
A. give B. gave C. giving D. to give
6.--- He is an amazing runner.
--- Yes, I was _____ to see how fast he ran.
A. amaze B. amazing C. amazed D. to amaze
7.---Sorry, I am late, Anne, _____ I couldn’t find your tape.
--- ______, Millie. I have got another one.
A. but; That’s all right B. and; It’s nothing C. so; That’s all D. but; All right
8.If you boil water, it ____ steam.
A. will become B. becomes C. become D. became
9.You won’t succeed _____ you work hard.
A. unless B. if C. when D. because
10.--- I’m tired of the life here. I want to try _____.
--- Just do it. But you should think twice before you act.
A. something strange B. strange something
C. something new D. new something
11.---When I returned, I found the door half _____. ......余下全文>>
牛津英语9AReading的翻译 悬赏分:35 - 解决时间:2008-9-14 22:13 哟啊当中课文翻译的!!!!要全部6篇 英文是什么啊????? #^()^# Chapter 1 Protecting the innocent ·课文翻译 Reading 第1章 保护无辜 潘西想为校报写一篇关于侦探的文章,为了获取信息,她采访了肯侦探。 潘西:你说你喜欢做侦探,为什么? 肯侦探:让我告诉你我最近处理的一桩案子,潘西。李先生是一个富翁,他独自一个人住,爱好收藏。他花200万买过一个花瓶,只展示给他的朋友吉尔和珍妮两个人看过,然后把它锁在房子里的保险箱里,但当天晚上,花瓶被某些人给偷了。李报了盗窃案,我就去他那儿找线索。 潘西:你有什么发现吗? 肯侦探:是的。我看见了一对黑色的珍珠耳环在打开的保险箱附近。在这房间被打开的窗户外,我发现在潮湿的地面上有许多泥,房间里的地毯一尘不染。 潘西:那你接下来做了什么? 肯侦探:我讯问了吉尔和珍妮,她们都否认偷了花瓶,但我注意到吉尔戴着黑色珍珠项链,不过没有带耳环。 潘西:那吉尔是小偷了? 肯侦探:不知道。我需要证据。一个好的侦探从不轻易下结论。我把耳环给吉尔看,她承认那是她的。她说有人在一个月前就把它从房间里偷了。我查证了这件事情,的确是真的。 潘西:那吉尔不再是怀疑对象了。可其他呢,窗外湿地上的泥?房间里一尘不染的地毯呢?怎么样了? 肯侦探:那告诉我可能没有小偷进过李的房间。因此我质问李。最后他承认偷了自己的花瓶。他给花瓶买了保险,如果花瓶被盗了,保险公司将支付给他200万元赔偿金。 潘西:那谁偷了吉尔的耳环呢? 肯侦探:也是李。他试着使吉尔代替他去坐牢。 潘西:所以李现在在坐牢。 肯侦探:是的。并且吉尔自由了。我的工作就是保护无辜者并找出罪犯。这就是我为什么喜欢做侦探的原因。 Ch4 非洲鬼鱼 一天,托尼收到一个学生的便条:“我爷爷常常给我们讲故事。我现在附上一个故事,兴许你可以登在你们的报纸上。”故事如下: 一天晚上,爷爷说:“我曾经有一个朋友,姓戴。他的名字叫亨利,但每个人都叫他快乐先生。快乐先生很会谋生。他去过很多地方。当他来到一个他喜欢的地方,他就开一家宠物店,开始卖非洲鬼鱼。 据他说,这是世界上唯一的隐性鱼,它们是特别好的宠物,因为他们不需要食物。他们只需要水。雌鬼鱼一年产一次鱼卵。产卵后,如果四周绝对安静,她马上显身。但一眨眼功夫,她又不见了。如果你看见她,你是极其幸运的,因为她是世界上最美丽的生物。 当快乐先生告诉他的顾客们这个故事时,他整缸整缸的鱼卖得非常快。当这些鱼全部售完,他通常离开此地到另外一个镇。” “是因为他的顾客不满意吗?”我们问。 “根本不是。”爷爷说。“他的顾客完全满意。他几乎没有接到过投诉。事实上,许多人告诉他他们从观赏隐身鱼中得到快乐。他们感到无比轻松。还有一些人乐此不彼得要请朋友们来赏鱼。有些人甚至宣称自己看到了雌鬼鱼,并说确实令人难忘。是的,快乐先生是一个聪明的人。” “你能告诉我们更多关于他的事吗?”我们问。 “现在不行。”爷爷说。“我累了,我要睡一会儿。你们这戏孩子为什么不去我房间看那缸鬼鱼?记住,如果你么安静地坐下来,仔细观看,可能就能看见一条雌鬼鱼。” 当我们激动地冲出房间,我听到爷爷悄声说:“谢谢你,快乐先生。” ch5 一家报纸举办了一个以著名历史传说为题的超短篇小说竞赛。下面是一个学生的参赛作品。 一名士兵从楼梯上一步两级地跑了下来,“队长,他们走了!”他叫到,“他们消失了,全都消失了......余下全文>>