我一直在试图找出为什么、如何以及在何处使用未登录的用户,但我没有找到我的确切问题或任何更接近的问题。我在哪里进行研究(我还阅读了其他帖子,看过 Youtube 视频):
我正在寻找使我的数据库更安全的方法,最近我知道有一个选项可以在不登录的情况下创建用户。我认为这很好。但是我不明白如何使用它(不是创建,使用),然后经过研究,我意识到这个用户在冒充另一个用户/角色时访问了数据库。我认为没有用户并以某种方式访问数据库会很棒。但是当我看到有一个叫做执行的东西时,我认为它没有用,因为为什么我要对这个“无登录”用户执行查询,因为它是另一个用户?为什么我只是不使用该用户的权限?然后我想也许这个用户权限太多了,所以我只是创建一个权限较少的新用户......
好吧,我不知道你为什么要创建一个没有登录的用户。这个应该怎么用?这很愚蠢,但我尝试登录并失败(对不起,但我习惯于与用户登录,我从未想过创建用户而不登录,我只知道用户登录到某些东西,这就是我的知识所在) .
所以,我不知道为什么要创建这种类型的用户而不是普通用户?我不知道如何(比如我登录,我只是输入查询并使用它)?我不知道在哪里(比如,我需要制作一个 C# 应用程序,我是否使用命令...)使用?
我的知识只带我到这里,我没有高级 DBA 可以问。如果可能,请用简单的话解释。
想象一下,你有人在运行一个应用程序,这需要一定的权限。您确实希望能够记录谁在做什么并查看谁登录到您的 SQL Server。所以每个人都需要自己的登录名(这可能是为域组创建的一个登录名)。
让这些人使用 SSMS 进行连接并在数据库中玩耍,您会感到不舒服。由于应用程序可能需要对客户表的 DELETE 权限(例如),因此最终用户现在可以从 SSMS 执行此操作。
因此,您创建了一个没有登录的用户,并让应用程序使用 EXECUTE AS 作为该用户。即,没有 EXECUTE AS,最终用户在数据库中根本没有权限(即,您为其创建登录名的潜在 AD 组及其在数据库中的后续用户)。但是当他们执行 EXECUTE AS 时,他们确实有特权。
这是读取安全性吗?不,当然不是。但也许比没有可追溯性或让最终用户能够“直接”在数据库中玩耍要好。
应用程序角色呢?是的,这可能会更严格,因为它们受密码保护。
另一种用法是在您测试事物时,使用 EXECUTE AS USER。您想尝试一些与权限相关的东西,并且更容易将权限分配给没有登录的用户,然后进行测试,然后必须为您想要测试的任何内容创建登录名和用户。
您在用户数据库中创建证书,从证书创建用户,授予该用户权限,并通过证书签署存储过程
这是存储过程获得所需权限所必需的,例如更新或删除特定表。然后授予最终用户执行存储过程的权限。结果是最终用户不能直接从表中更新或删除,但使用存储过程,他可以。
存储过程可以具有允许限制每次执行可以删除/更新多少行的逻辑,或者限制哪些行,进行一些检查等。