none
没有管理员权限,也不能修改数据,即不能处理业务内容,但是要能监控数据库(如能访问sys.对象 sys.DM_对象 ) 只能单独授权吗? RRS feed

答案

  • 采用权限控制方法.

    解决方法:

    打开新建用户登录名框

    1: 服务器新建一个登录名Monitor. 设置密码, 服务器角色设置public

    2: 在用户映射选项卡,千万记住不能映射用户, 这样的话,该用户不能访问业务数据库.

    3: 使用该用户登录名登陆sql 查询 

    SELECT * FROM sys.sysprocesses

    ok!

    • 已建议为答案 DuoMing 2014年12月16日 2:40
    • 取消建议作为答案 hychx 2014年12月16日 3:24
    • 已标记为答案 hychx 2014年12月16日 3:56
    2014年12月16日 2:38

全部回复

  • 可以,将这些dmv封装在存储过程里,使用存储过程的execute as

    然后授权用户执行即可。

    如果涉及到instance level的权限,使用stored procedure sign

    http://www.cnblogs.com/stswordman/archive/2008/07/29/1255322.html


    2014年12月15日 11:06
    版主
  • Or just grant read permission on dmvs, some of them need view sever/db state rights.
    2014年12月15日 14:48
  • 谢谢。

    我想授权给某个数据库用户。使他能够对数据库做不同角度的性能监控,这就意味着要关联不同的系统表和系统视图。

    但不想这个数据库用户能改变我的业务数据,如改变我的客户信用等级,或者查看客户的消费记录等等。

    每个系统视图都单个授权,管理起来很麻烦。

    封装到存储过程里,又不灵活。



    • 已编辑 hychx 2014年12月16日 1:31
    2014年12月16日 1:25
  • You can grant read permission on sys schema in db to the user.
    2014年12月16日 1:35
  • 采用权限控制方法.

    解决方法:

    打开新建用户登录名框

    1: 服务器新建一个登录名Monitor. 设置密码, 服务器角色设置public

    2: 在用户映射选项卡,千万记住不能映射用户, 这样的话,该用户不能访问业务数据库.

    3: 使用该用户登录名登陆sql 查询 

    SELECT * FROM sys.sysprocesses

    ok!

    • 已建议为答案 DuoMing 2014年12月16日 2:40
    • 取消建议作为答案 hychx 2014年12月16日 3:24
    • 已标记为答案 hychx 2014年12月16日 3:56
    2014年12月16日 2:38
  • User can only see its own connections without proper permission, did you test what you said first?
    2014年12月16日 3:25
  • 采用权限控制方法.

    解决方法:

    打开新建用户登录名框

    1: 服务器新建一个登录名Monitor. 设置密码, 服务器角色设置public

    2: 在用户映射选项卡,千万记住不能映射用户, 这样的话,该用户不能访问业务数据库.

    3: 使用该用户登录名登陆sql 查询 

    SELECT * FROM sys.sysprocesses

    ok!

    SELECT database_id from SYS.DM_DB_INDEX_USAGE_STATS WHERE database_id=DB_ID()

    无法执行。


    2014年12月16日 3:32
  • 采用权限控制方法.

    解决方法:

    打开新建用户登录名框

    1: 服务器新建一个登录名Monitor. 设置密码, 服务器角色设置public

    2: 在用户映射选项卡,千万记住不能映射用户, 这样的话,该用户不能访问业务数据库.

    3: 使用该用户登录名登陆sql 查询 

    SELECT * FROM sys.sysprocesses

    ok!

    我再次试了一次。

    SELECT * FROM sys.sysprocesses 是可以执行的

    但是

    SELECT database_id from SYS.DM_DB_INDEX_USAGE_STATS WHERE database_id=DB_ID(“dbName”)

    无法执行。

    然后发现

    GRANT VIEW SERVER STATE TO [youUserName]

    这样可以免强的解决用户可以查看服务器状

    然后给出用户对业务数据库的只读权限。

    再对相关业务表给出拒绝读取权限。

    暂时先这样了。

    谢谢各位。


    2014年12月16日 3:53
  • Told you 13 hours ago.
    2014年12月16日 4:05
  • Told you 13 hours ago.
    Or just grant read permission on dmvs.... 我理解为“需要将dmvs 的读取权限给用户” 这样的话,N多的视图,一个一个的来,太麻烦。所以略过 后面的 view sever/db state 说实话,在此之前,我不知道有Server state 权限这一说。 再次感谢!
    2014年12月16日 4:37
  • Repeat my response again, you can grant read permission on sys schema in db to the user.
    2014年12月16日 4:46
  • Repeat my response again, you can grant read permission on sys schema in db to the user.

    GRANT SELECT,EXECUTE ON SCHEMA::SYS TO demo1

    go 执行之后,

    SELECT OBJECT_ID FROM SYS.DM_DB_INDEX_USAGE_STATS

    返回

    消息297,级别16,状态1,服务器HK_WebService_SqlDB_102-HP

    用户没有执行此操作的权限

    2014年12月16日 10:29
  • User needs 'view server state' permission for this DMV as I said yesterday:

    Or just grant read permission on dmvs, some of them need view sever/db state rights.

    Books online has details for each of those DMVs.

    2014年12月16日 14:26