Sql server 2005 是否控制对表中某些列的访问?

Sql server 2005 是否控制对表中某些列的访问?,sql-server-2005,database,Sql Server 2005,Database,是否可以控制对表中特定列的访问,并只允许访问MS-SQL server中的特定列?如果是,怎么做?如果没有,还有其他选择吗 IMO正确的方法是使用视图,并将视图保护给可以访问它的人 有关更好的示例,请参见此处 假设您有一个包含三个列(a、b和c)的表(the_table),您可以创建一个只包含所需列的视图 create view show_colc_view as select c from the_table 然后,您可以保护在表和视图上具有CRUD权限的人员 因此,有关人士可以这

是否可以控制对表中特定列的访问,并只允许访问MS-SQL server中的特定列?如果是,怎么做?如果没有,还有其他选择吗

IMO正确的方法是使用视图,并将视图保护给可以访问它的人

有关更好的示例,请参见此处

假设您有一个包含三个列(a、b和c)的表(
the_table
),您可以创建一个只包含所需列的视图

create view show_colc_view 
as 
  select c from  the_table
然后,您可以保护在表和视图上具有CRUD权限的人员

因此,有关人士可以这样做:

select * from  show_colc_view
但不是

select * from  the_table

使用允许的列创建视图,并仅授予用户对该视图的访问权限

table columns: a, b, c, d, e, f

CREATE VIEW allowed as SELECT a,b,c FROM table;
GRANT SELECT ON allowed to <user>;

他们只会看到列a、b和c(而不是d、e或f)

SQL Server实际上支持列级权限


有关如何通过SSMS UI应用它们的详细信息,请参阅。

当存在列级权限时,为什么说这是“正确的方法”?@Martin——这不是我第一次听说正确的安全技术是创建视图并只允许访问这些视图。当然,这是一个最佳的安全解决方案,并不总是一个易于编程的解决方案。但是,如果您使用的是Oracle,那么视图提供的细粒度安全性比“什么组得到什么列”的列表更容易维护。但请不要相信我的话。像这样的基础性论文进行了讨论:这里有一条更好、更易访问的信息:(OWASP演示文稿的幻灯片43)——使用行级安全性+视图的组合是最佳选择@avgvstvs—第二个链接讨论的是行级安全性,而不是列级安全性。我同意您的观点,为了便于管理,视图可以让您轻松定义列组。@Martin确切地说,OWASP演示文稿中没有讨论列级控件,原因正是我上面讨论的管理原因,您也同意了。如果您拒绝访问除视图之外的所有表,那么您只需为数据创建一个易于维护和审核的白名单。
SELECT * from allowed;