SQLServer监控用户权限改变

wsf 2013-09-22 03:03:23
如何在SqlServer2008或2005中,当用户的权限发生改变时,能够及时发现.

谢谢各位
...全文
229 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-09-23
  • 打赏
  • 举报
回复
2008的话有一个新特性——基于策略的管理,可以实现,我的文章有些例子: http://blog.csdn.net/dba_huangzj/article/details/8763119
wsf 2013-09-23
  • 打赏
  • 举报
回复
非常感谢以上各位,我会试试这段代码。 另:如何监控非法用户登录?还有对用户表的操作? 谢谢。
LongRui888 2013-09-22
  • 打赏
  • 举报
回复
另外,eventdat字段中还包含了如下的具体信息:
<EVENT_INSTANCE>
  <EventType>GRANT_DATABASE</EventType>
  <PostTime>2013-09-22T15:43:44.133</PostTime>
  <SPID>52</SPID>
  <ServerName>GGG-PC</ServerName>
  <LoginName>ggg-PC\Administrator</LoginName>
  <UserName>dbo</UserName>
  <DatabaseName>ggg</DatabaseName>
  <SchemaName>dbo</SchemaName>
  <ObjectName>wcT</ObjectName>
  <ObjectType>TABLE</ObjectType>
  <Grantor>dbo</Grantor>
  <Permissions>
    <Permission>select</Permission>
  </Permissions>
  <Grantees>
    <Grantee>public</Grantee>
  </Grantees>
  <AsGrantor />
  <GrantOption>0</GrantOption>
  <CascadeOption>0</CascadeOption>
  <TSQLCommand>
    <SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />
    <CommandText>grant select on ggg.dbo.wct to public</CommandText>
  </TSQLCommand>
</EVENT_INSTANCE>
你可以进一步解析。
LongRui888 2013-09-22
  • 打赏
  • 举报
回复
这个代码,你可以参考一下:


--2.1在master数据库中建立服务器级别跟踪表
use master
go

create table server_eventdata
	(eventdata xml,
     principal_user nvarchar(100),
     login_user nvarchar(100)
    )
go    
/*
select * from sys.trigger_event_types
where type_name like '%grant%' or
      type_name like '%deny%' or
      type_name like '%revoke%'
*/

    
    
--2.2建立服务器级别触发器

create trigger gyy_server
on all server
for GRANT_SERVER,
    DENY_SERVER,
    REVOKE_SERVER,
    GRANT_DATABASE,
    DENY_DATABASE,
    REVOKE_DATABASE
as

insert into server_eventdata
select EVENTDATA(),USER,SUSER_NAME()
go


--2.3
create database wc
go

use wc
go

create table dbo.wc_table(v int)

insert into dbo.wc_table values(1)
go


use wc
go

grant select on wc.dbo.wc_table to public

go

--查看记录的事件
select eventdata.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)') as '事件类型',
       eventdata.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(100)') as 'sql授权语句'
from master.dbo.server_eventdata t
唐诗三百首 2013-09-22
  • 打赏
  • 举报
回复
可以用DDL触发器跟踪记录grant,deny,revoke事件. 参考 http://technet.microsoft.com/zh-cn/library/ms189799(v=sql.105).aspx
wsf 2013-09-22
  • 打赏
  • 举报
回复
用审计可以吗?但我试了一下,好像没有到达要求。 如果用触发器,如何写这个触发器呢?
KevinLiu 2013-09-22
  • 打赏
  • 举报
回复
可以用Trigger监控。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧