楼主: Cherish_j_wang

[精华] MSSQL DBA 精华总结[处理对象名称中特殊字符]

[复制链接]
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
61#
 楼主| 发表于 2012-3-19 21:21 | 只看该作者
hwtong 发表于 2012-3-19 08:32
转账转出        pub币 -1000        向 Cherish_j_wang 进行积分转帐        2012-03-19 08:31

哈哈~~奖励收到~~谢谢啦

使用道具 举报

回复
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
62#
 楼主| 发表于 2012-3-19 21:21 | 只看该作者
crystal123789 发表于 2012-3-19 11:03
支持!好贴


多谢支持。~~

使用道具 举报

回复
论坛徽章:
0
63#
发表于 2012-3-21 12:59 | 只看该作者
支持,谢谢

使用道具 举报

回复
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
64#
 楼主| 发表于 2012-3-21 20:53 | 只看该作者
sokoo 发表于 2012-3-21 12:59
支持,谢谢

多谢支持

使用道具 举报

回复
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
65#
 楼主| 发表于 2012-3-21 21:47 | 只看该作者
本帖最后由 Cherish_j_wang 于 2012-3-21 21:51 编辑

MSSQL DBA 精华总结
之View如何做权限控制
背景
在数据库开发的过程中,我们经常会遇到关于权限控制的下面场景:
1.      针对某个用户群体授予权限
2.      群体之前有级别高低之分,高级别的群用户可以查看低级别的数据,而反之则不行
3.      这是关于安全性的考虑
4.      比如,公司的高层可以看到基层员工信息和待遇等场景
脚本
那么这个问题,我们可以使用MSSQLServer中的View来轻松解决这个问题,简直妙不可言,参见测试方法:
请开启一个SSMS连接执行下面的代码,比如连接SPID=90
  1. use test
  2. go

  3. --create two logins(employee,manager)
  4. if exists(
  5.                 select *
  6.                 from sys.syslogins
  7.                 where name = 'Manager')
  8. begin
  9.         drop login Manager;
  10. end
  11. GO
  12. create login Manager with password='Manager',check_policy = off;
  13. GO

  14. if USER_ID('Manager') is not null
  15.         drop user Manager;
  16. GO
  17. create user Manager for login Manager;
  18. GO
  19.         
  20. if exists(
  21.                 select *
  22.                 from sys.syslogins
  23.                 where name = 'employee')
  24. begin
  25.         drop login employee;
  26. end
  27. GO
  28. create login employee with password='employee',check_policy = off;
  29. GO
  30. if USER_ID('employee') is not null
  31.         drop user employee
  32. GO
  33. create user employee for login employee;
  34. GO

  35. --create basic table
  36. if OBJECT_ID('dbo.Test_ViewPermission','u')is not null
  37.         drop table dbo.Test_ViewPermission
  38. ;
  39. GO
  40. create table dbo.Test_ViewPermission
  41. (
  42.         id int identity(1,1) not null primary key
  43.         ,name varchar(20) not null
  44.         ,level_no int not null
  45.         ,title varchar(20) null
  46.         ,viewByCEO char(1) not null
  47.         ,viewByManager char(1) not null
  48.         ,viewByEmployee char(1) not null
  49.         ,salary decimal(9,2) not null
  50. );

  51. --data init.
  52. insert into dbo.Test_ViewPermission
  53. select 'AA',0,'CEO','Y','Y','Y',1000000.0
  54. union all
  55. select 'BB',1,'Manager','Y','Y','Y',100000.0
  56. union all
  57. select 'CC',2,'employee','Y','Y','Y',10000.0
  58. ;
  59. GO
  60. --create views
  61. if OBJECT_ID('dbo.v_employeeinfo_forCEO','v')is not null
  62.         drop view dbo.v_employeeinfo_forCEO
  63. ;
  64. GO
  65. create view dbo.v_employeeinfo_forCEO
  66. as
  67. select *
  68. from dbo.Test_ViewPermission WITH(NOLOCK)
  69. GO

  70. if OBJECT_ID('dbo.v_employeeinfo_forManager','v')is not null
  71.         drop view dbo.v_employeeinfo_forManager
  72. ;
  73. Go
  74. create view dbo.v_employeeinfo_forManager
  75. as
  76. select
  77.         name
  78.         ,level_no
  79.         ,title
  80.         ,viewByManager
  81.         ,viewByEmployee
  82.         ,salary
  83. from dbo.Test_ViewPermission WITH(NOLOCK)
  84. where level_no >= 1;
  85. GO

  86. if OBJECT_ID('dbo.v_employeeinfo_forEmployee','v')is not null
  87.         drop view dbo.v_employeeinfo_forEmployee
  88. ;
  89. GO
  90. create view dbo.v_employeeinfo_forEmployee
  91. as
  92. select
  93.         name
  94.         ,level_no
  95.         ,title
  96.         ,viewByEmployee
  97.         ,salary
  98. from dbo.Test_ViewPermission WITH(NOLOCK)
  99. where  level_no >= 2;
  100. GO

  101. --====permission init.
  102. --deny all permission to user for table & view
  103. deny all on dbo.Test_ViewPermission TO Manager;
  104. deny all on dbo.Test_ViewPermission TO employee;

  105. deny all on dbo.v_employeeinfo_forCEO TO Manager;
  106. deny all on dbo.v_employeeinfo_forCEO TO employee;

  107. deny all on dbo.v_employeeinfo_forManager TO employee;

  108. --
  109. grant select on dbo.v_employeeinfo_forManager TO Manager;
  110. grant select on dbo.v_employeeinfo_forEmployee TO Manager;

  111. grant select on dbo.v_employeeinfo_forEmployee TO employee;
复制代码
使用manager用户开启另外一个SSMS连接,比如SPID=91,执行下面的测试代码:
  1. use test
  2. GO

  3. --manager can read data from manager group
  4. select
  5.                 CURRENT_USER AS 'Who am i'
  6.                 ,*
  7. from dbo.v_employeeinfo_forManager
  8. GO

  9. --manager can read data from employee group
  10. select
  11.                 CURRENT_USER AS 'Who am i'
  12.                 ,*
  13. from dbo.v_employeeinfo_forEmployee
  14. GO

  15. --manager cann't read data from ceo group
  16. select *
  17. from v_employeeinfo_forCEO
  18. GO
  19. --manager cann't read data from table
  20. select *
  21. from dbo.Test_ViewPermission
复制代码
结果:
第一、二个查询应该有结果集,第三和第四个查询,应该报告没有权限
第一个结果集:
Who am i        name        level_no        title        viewByManager        viewByEmployee        salary
Manager        BB        1        Manager        Y        Y        100000.00
Manager        CC        2        employee        Y        Y        10000.00

第二个结果集:
Who am i        name        level_no        title        viewByEmployee        salary
Manager        CC        2        employee        Y        10000.00

第三和第四个结果,报错:
Msg 229, Level 14, State 5, Line 3
The SELECT permission was denied on the object 'v_employeeinfo_forCEO', database 'test', schema 'dbo'.
Msg 229, Level 14, State 5, Line 2
The SELECT permission was denied on the object 'Test_ViewPermission', database 'test', schema 'dbo'.

今天的分享至此结束。

使用道具 举报

回复
论坛徽章:
0
66#
发表于 2012-3-22 09:20 | 只看该作者
谢谢楼主分享,又学习到东西了,下载研究研究

使用道具 举报

回复
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
67#
 楼主| 发表于 2012-3-22 21:12 | 只看该作者
densonli1984 发表于 2012-3-22 09:20
谢谢楼主分享,又学习到东西了,下载研究研究

能够学到东西,说明我分享的东西有用~这个是对我最大的安慰

使用道具 举报

回复
论坛徽章:
104
生肖徽章2007版:猪
日期:2012-07-12 14:24:56菠菜神灯
日期:2013-05-26 22:03:18生肖徽章2007版:猪
日期:2012-07-19 11:10:12生肖徽章2007版:猪
日期:2012-07-19 11:10:12生肖徽章2007版:猪
日期:2012-07-11 19:07:11生肖徽章2007版:猪
日期:2012-07-19 11:10:12生肖徽章2007版:猪
日期:2012-07-19 11:10:12ITPUB伯乐
日期:2012-05-22 15:05:25NBA季后赛纪念徽章
日期:2013-06-21 14:52:05NBA季后赛大富翁
日期:2013-06-21 14:57:11
68#
发表于 2012-3-22 23:13 | 只看该作者
路过留个脚印

使用道具 举报

回复
论坛徽章:
0
69#
发表于 2012-3-24 18:21 | 只看该作者
好東西,做BI的,有時處理一些大量的數據,發現實際上要從DBA的角度去分析,先保存了,還要慢慢消化,謝謝分享

使用道具 举报

回复
论坛徽章:
2
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
70#
发表于 2012-3-28 10:42 | 只看该作者
很多东东,需要慢慢研究一下,谢谢先。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表