【问题标题】:database access impersonation数据库访问模拟
【发布时间】:2023-04-02 04:12:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我不知道有人使用应用程序角色...

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


【解决方案1】:

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

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

您必须在每个 SQL 调用中将用户名作为参数传递,或者可能使用 CONTEXT_INFO。

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

【讨论】:

    【解决方案2】:

    视情况而定。

    如果你的数据库和 WCF 服务在同一个盒子上,并且你做了很多玩弄游戏来模仿,那么这是可能的。一旦您将数据库移动到另一个盒子,它就会停止工作。

    这是一个已知的限制,原因是模拟会创建一个令牌,让您进入一个盒子,但这不能传递给另一个盒子。我试图找到 MS 家伙已经回答但仍然无法找到的问答。每当我找到它时,都会更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 2012-08-17
      相关资源
      最近更新 更多