我们目前有一个winforms应用程序,允许用户登录才能访问系统。身份验证系统是一个定制的杂七杂八。我正在实现一个更改,将用户的NT用户名和域名链接到他们现有的自定义帐户,这样他们就不需要重复登录。我使用WindowsIdentity.GetCurrent().Name,然后将该信息存储在一个数据库表中,该表映射到它们的旧帐户I。我想知道的是,用户是否可以使用与真实域名镜像的计算机名通过vpn进入网络?这可能会让恶意用户访问某人的帐户。我想真正的问题是:是否有一种方法可以区分sql Servers域和用户域,而不只是对名称进行字符串比较。
发布于 2011-02-17 07:02:00
是的,如果您的应用程序使用SQL身份验证来访问数据库,就会发生这种情况。如果将数据库连接更改为使用可信身份验证,则SQL Server将根据域控制器对登录进行身份验证。因此,尽管用户有权访问应用程序,但他们无法访问驱动应用程序的数据库。如果这样做了,还可以将用户名的捕获移动到SQL Server存储过程中,这将确保捕获的名称与域的名称相匹配,而不是与本地用户的名称相匹配。
发布于 2011-02-17 07:05:26
服务器不能信任客户端。
如果客户机能够获得并使用凭据登录到数据库服务器,那么您就完了。
如果您的服务器只是一个数据库服务器,并且您的应用程序不使用可信连接,并且您的应用程序不提示输入数据库凭据,那么您就完蛋了。(请参阅前面的语句。)
我很懒。如果我愿意的话,我会给WindowsIdentity.GetCurrent().Name打补丁以返回“管理员”。
https://stackoverflow.com/questions/5023192
复制相似问题