业界 | 信息 | 基础 | 配置 | 安全 | 系统 | 方案 | 协议 | 硬件 | 下载 | 制度 | 漏洞 | 解密 | 群集 | 论文 | 导购 | 数据库 | 反病毒 | 反黑客 | 白皮书 | 负载均衡 | Windows | Linux | Unix |
热门搜索:  安全  ?务器  IIS  VMWare  微软  企业  网络  黑客  win  sql RSS订阅
服务器安全资讯网

服安最新信息资讯

服务器安全资讯网

服安资讯热点推荐

服务器安全资讯网

服安资讯阅览排行

信息安全法律法规

服务器安全技术资讯

服安解决方案

如何确定自己在SQL Server 2005中拥有的权限

来源:中国服务器安全网   时间:2008-02-29  作者:  点击:次  责任编辑:Flyfox
TAG:   Server 权限 SQL 2005 如何确定   服务器安全应急处理中心:让您的服务器更安全!  进入安全讨论社区 

摘要:
有时候我会碰到这样的应用程序问题,即我有时不能执行应用程序的某些功能,而我的同事或同行却可以完成。所以我需要快速而且简便的方法能够确定我在SQL Server里的权限...

如何确定自己在ServerSecurity/Database/'>SQL Server 2005中拥有的权限


问题:

  有时候我会碰到这样的应用程序问题,即我有时不能执行应用程序的某些功能,而我的同事或同行却可以完成。所以我需要快速而且简便的方法能够确定 我在ServerSecurity/Database/'>SQL Server里的权限。有没有什么简单易行的方法呢?另外,我如何能够比较两个不同的用户在同一个实例、数据库或对象里的权限差异呢?最好能够提供尽量多 的建议,谢谢。

  专家解答:

  针对你的问题,虽然有好几种不同的解决方案(Management Studio、系统存储过程、系统视图、自定义脚本等等)可以确定你在ServerSecurity/Database/'>SQL Server中的权限,但是在这里我们想主要介绍fn_my_permissions表值函数的功能。简单来说,fn_my_permissions表值 函数可以接受对象名称和对象类型作为变量根据返回有效的权限结果,包括直接赋予登录用户权限、登录用户所属群体或团体的权限或任何不被拒绝的权限。从对象 水平上来说,下面列出了可以返回的对象信息类型:

  •   APPLICATION ROLE
  •   ASSEMBLY
  •   ASYMMETRIC KEY
  •   CERTIFICATE
  •   CONTRACT
  •   DATABASE
  •   ENDPOINT
  •   FULLTEXT CATALOG
  •   LOGIN
  •   MESSAGE TYPE
  •   OBJECT
  •   REMOTE SERVICE BINDING
  •   ROLE
  •   ROUTE
  •   SCHEMA
  •   SERVER
  •   SERVICE
  •   SYMMETRIC KEY
  •   TYPE
  •   USER
  •   XML SCHEMA COLLECTION

  而系统管理员拥有管理特权,对于这个函数也许不会很感兴趣,但是管理员也可以模仿普通用户通过使用该函数来确定其用户有效权限来解决某些跟权限 相关的问题。如果某个用户可以执行某个任务,而另外一个用户则不能的话,这个表值函数的作用就很大了,可以确定在对象水平上不同用户的权限差异。

  我们现在可以来看看一些使用fn_my_permissions表值函数的基本例子:

  例子 - ServerSecurity/Database/'>SQL Server实例权限

  USE AdventureWorks;
  SELECT *
  FROM fn_my_permissions(NULL, 'SERVER');
  GO

  例子 - 数据库权限

  USE AdventureWorks;
  SELECT *
  FROM fn_my_permissions('AdventureWorks', 'DATABASE');
  GO

  例子 – 表权限

  USE AdventureWorks;
  SELECT *
  FROM fn_my_permissions('HumanResources.Employee', 'OBJECT')
  ORDER BY subentity_name, permission_name ;
  GO

  安全性实例

  前面是三个比较基本直接的确定权限的例子,但是还没有真正地显示出fn_my_permissions表值函数的价值。我们现在来创建四个不同 的登录用户,分别对其赋予和拒绝各种权利。然后我们来针对某个具体的对象执行fn_my_permissions来确定每个用户的有效权限。

  创建 ServerSecurity/Database/'>SQL Server 登录用户

  USE [master]
  GO
  CREATE LOGIN [Tom] WITH PASSWORD=N'Tom', DEFAULT_DATABASE=[AdventureWorks], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
  GO
  USE [AdventureWorks]
  GO
  CREATE USER [Tom] FOR LOGIN [Tom]
  GO
  USE [AdventureWorks]
  GO
  ALTER USER [Tom] WITH DEFAULT_SCHEMA=[HumanResources]
  GO
  USE [master]
  GO
  CREATE LOGIN [Linda] WITH PASSWORD=N'Linda', DEFAULT_DATABASE=[AdventureWorks], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
  GO
  USE [AdventureWorks]
  GO
  CREATE USER [Linda] FOR LOGIN [Linda]
  GO
  USE [AdventureWorks]
  GO
  ALTER USER [Linda] WITH DEFAULT_SCHEMA=[Purchasing]
  GO
  USE [master]
  GO
  CREATE LOGIN [Jessica] WITH PASSWORD=N'Jessica', DEFAULT_DATABASE=[AdventureWorks], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
  GO
  USE [AdventureWorks]
  GO
  CREATE USER [Jessica] FOR LOGIN [Jessica]
  GO
  USE [AdventureWorks]
  GO
  ALTER USER [Jessica] WITH DEFAULT_SCHEMA=[Sales]
  GO
  USE [master]
  GO
  CREATE LOGIN [Katie] WITH PASSWORD=N'Katie', DEFAULT_DATABASE=[AdventureWorks], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
  GO
  USE [AdventureWorks]
  GO
  CREATE USER [Katie] FOR LOGIN [Katie]
  GO
  USE [AdventureWorks]
  GO
  ALTER USER [Katie] WITH DEFAULT_SCHEMA=[dbo]
  GO

  向固定的数据库角色赋予权利

  USE [AdventureWorks]
  GO
  EXEC sp_addrolemember N'db_owner', N'Jessica'
  GO
  EXEC sp_addrolemember N'db_datareader', N'Katie'
  GO
  EXEC sp_addrolemember N'db_datawriter', N'Katie'
  GO

  赋予对象水平的权利

  use [AdventureWorks]
  GO
  GRANT EXECUTE ON [dbo].[uspGetBillOfMaterials] TO [Tom]
  GO
  GRANT EXECUTE ON [dbo].[uspGetEmployeeManagers] TO [Tom]
  GO
  GRANT EXECUTE ON [dbo].[uspGetManagerEmployees] TO [Tom]
  GO
  GRANT EXECUTE ON [dbo].[uspGetWhereUsedProductID] TO [Tom]
  GO
  GRANT EXECUTE ON [dbo].[uspLogError] TO [Tom]
  GO
  use [AdventureWorks]
  GO
  GRANT SELECT ON [HumanResources].[EmployeeAddress] TO [Linda]
  GO
  GRANT EXECUTE ON [dbo].[uspGetBillOfMaterials] TO [Linda]
  GO
  GRANT SELECT ON [dbo].[MyTableVar] TO [Linda]
  GO
  GRANT SELECT ON [HumanResources].[Department] TO [Linda]
  GO
  GRANT SELECT ON [dbo].[AWBuildVersion] TO [Linda]
  GO
  GRANT SELECT ON [HumanResources].[EmployeeDepartmentHistory] TO [Linda]
  GO
  GRANT SELECT ON [dbo].[DatabaseLog] TO [Linda]
  GO
  GRANT SELECT ON [dbo].[ErrorLog] TO [Linda]
  GO
  GRANT SELECT ON [HumanResources].[JobCandidate] TO [Linda]
  GO
  GRANT SELECT ON [HumanResources].[Shift] TO [Linda]
  GO
  GRANT SELECT ON [HumanResources].[Employee] TO [Linda]
  GO
  GRANT SELECT ON [HumanResources].[EmployeePayHistory] TO [Linda]
  GO
顶一下
(0)
0%
踩一下
(0)
0%
服务器安全维护网:为您的服务器安全、稳定运行助航,提供服务器全方面的技术支持服务! 服务器安全资讯网(Fuancn.CN)登载此文仅为传递更多信息之目的,并不意味着赞同其观点或证实其描述。
  • 本文引用地址:双击复制发送给您的朋友!
  • 上一篇:轻松掌握如何从命令行启动mysqld服务器 下一篇:如何用SQL语句查询表名和行数?

    - 关于本站 - 网站地图 - 百度新闻 - 版权申明 - 合作伙伴 - 安全服务 - 服安公告 - 常见问题 - 技术Q群 - 在线留言 - 联系我们 -