数据库访问模拟

时间:2010-12-09 13:20:15

标签: sql-server wcf-security windows-authentication

我的目标是阻止用户直接访问数据库服务器。一种方法是在前端应用程序和数据库服务器之间的中间创建WCF服务或Web服务。

首先,用户将通过应用程序进行身份验证。随后,应用程序将通过WCF服务连接以执行业务逻辑操作。 WCF服务将使用一个Windows帐户执行与数据库相关的操作。这将阻止其他用户直接访问数据库服务器,因为该权限仅授予特定的一个Windows帐户。

以下是我的问题:即使数据库访问仅授予一个Windows帐户,并且WCF将使用此Windows帐户执行与数据库相关的操作,是否可以使用登录的凭据标记所有与数据库相关的操作用户?

更新
谢谢你的回复。似乎上述情况无法实现。我目前正在探索SQL 2008应用程序角色功能。其中一个例子是here。但经过进一步探索后,显然连接池存在问题。

更新
有关SQL Server应用程序角色的堆栈溢出线程here

2 个答案:

答案 0 :(得分:0)

取决于

如果你的数据库和WCF服务在同一个盒子上并且你做了大量的jiggery pokery来模仿,那么它是可能的。只要将数据库移动到另一个框,它就会停止工作。

这是一个已知的限制,原因是模拟会创建一个令牌,让你进入一个盒子,但这不能通过另一个盒子。我试图找到Q& A,其中MS的家伙已经回答但仍然无法做到。每当我找到它时,都会更新。

答案 1 :(得分:0)

您必须在sys.server_principals中设置每个用户才能启用上下文切换,例如EXECUTE AS,这意味着他们无论如何都有直接的数据库访问。

如果启用了kerberos / delegation,则同样适用。链接OneTwo

您必须在每次SQL调用时将用户名作为参数传递,或者使用CONTEXT_INFO。

注意:每个MS Office用户都有MSQRY32.EXE,它充当查询工具。如果您不想直接访问数据库,则需要确保没有设置或授予权限