审核包含许多列的Microsoft SQL Server表

时间:2016-01-08 07:46:43

标签: sql-server security user-input audit

我在将此审核工作放在桌面上时遇到问题。

我有一个包含197列的表,我想审核它。我们之前已成功使用此解决方案,但表格的列总是较少。

我实施的解决方案来自底部的这个网址。

它似乎与我的表有如此多的列有关。有没有人对此有任何意见?

Pop Rivett SQL Server Audit

1 个答案:

答案 0 :(得分:1)

我有两个想法too many columns与错误的序数位置。

链接中的代码来自2006年。因此它是为SQL Server 2005编写的。基于COLUMNS_UPDATED()

  

INFORMATION_SCHEMA.COLUMNS视图的ORDINAL_POSITION列是   与返回的列的位模式不兼容   COLUMNS_UPDATED。

     

获得与之兼容的位模式   COLUMNS_UPDATED,引用COLUMNPROPERTY的ColumnID属性   查询INFORMATION_SCHEMA.COLUMNS视图时的系统函数。

CREATE TABLE tab(id INT, col1 INT, col2 INT, col3 INT,
                 col4 INT, col5 INT, col6 INT, col7 INT, col8 INT);

ALTER TABLE tab DROP COLUMN col1;
ALTER TABLE tab DROP COLUMN col5;

ALTER TABLE tab ADD col9 INT;
ALTER TABLE tab ADD col1 INT;

SELECT column_name,
  ordinal_position,
  COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME),      
                 COLUMN_NAME, 'ColumnID') AS pos
FROM INFORMATION_SCHEMA.columns
 WHERE [TABLE_NAME] like '%tab%'
ORDER BY ordinal_position;

SqlFiddleDemo

输出:

╔══════════════╦═══════════════════╦═════╗
║ column_name  ║ ordinal_position  ║ pos ║
╠══════════════╬═══════════════════╬═════╣
║ id           ║                1  ║   1 ║
║ col2         ║                2  ║   3 ║
║ col3         ║                3  ║   4 ║
║ col4         ║                4  ║   5 ║
║ col6         ║                5  ║   7 ║
║ col7         ║                6  ║   8 ║
║ col8         ║                7  ║   9 ║
║ col9         ║                8  ║  10 ║
║ col1         ║                9  ║  11 ║
╚══════════════╩═══════════════════╩═════╝

结果:

ORIDINAL_POSITION -> no gaps, range 1-9
pos(aka ColumnId) -> gaps, range 1-11, 2 and 6 skipped

或者,如果检查列是否已分页,您可以使用UPDATE

  

更新(专栏)

     

返回一个布尔值,指示INSERT还是UPDATE   尝试在表或视图的指定列上进行。 UPDATE()是   在Transact-SQL INSERT或UPDATE的主体内的任何位置使用   触发器来测试触发器是否应该执行某些操作。