Zes*_*aba 4 security sql-server permissions impersonation
这个问题是关于 Microsoft SQL Server 中的模拟。我想知道,如果我对特定登录拥有模拟权限,那么我可以随时轻松地模拟该登录,并且不需要使用EXECUTE AS OWNER?的存储过程。如果是这样,那么存储过程的目的是什么EXECUTE AS?
很好的问题。是的,如果 LoginA(或 UserA)IMPERSONATE在 LoginB(或 UserB)上被授予权限,则 LoginA(或 UserA)可以随时执行该EXECUTE AS 语句,不受限制:
EXECUTE AS LOGIN = 'LoginB';
Run Code Online (Sandbox Code Playgroud)
或者
EXECUTE AS USER = 'UserB';
Run Code Online (Sandbox Code Playgroud)
那么 EXECUTE AS 存储过程的目的是什么?
EXECUTE AS 该子句(语句的一部分)的目的CREATE {module}是仅在该模块的上下文中临时授予该权限。IMPERSONATE这可以防止您需要显式授予IMPERSONATE. 不同之处在于,在该模块的上下文之外EXECUTE AS {SomeUser},执行该模块的任何人都不应该具有模拟该用户的能力。您不希望登录名/用户能够随时冒充其他人。这是一个安全风险。该EXECUTE AS 子句使您能够仅在您愿意时让委托人模拟另一个委托人,而不是当他们尝试自己模拟时(您无法限制他们使用这些提升的权限执行的操作)。因此,您实际上确实想要该EXECUTE AS条款,并且不想授予任何IMPERSONATE人(如果可以避免,而且很可能可以避免)。
例如:没有TRUNCATE TABLE权限。如果您希望某人能够截断特定的表(他们不拥有该表,因为他们确实有权这样做),您可以IMPERSONATE在 上授予他们权限dbo。然而,没有办法限制他们的行为仅发出TRUNCATE TABLE,并且仅在该特定表上。EXECUTE AS USER = 'dbo';该用户可以随时执行,然后做任何他们想做的事。但是,通过添加EXECUTE AS 'dbo'到该CREATE PROCEDURE .... AS TRUNCATE TABLE {TableName};语句,无论谁执行该模块,仍然会模拟dbo,但仅限于该模块中的操作,这里只是截断特定的表。
当然,语句的EXECUTE AS 子句CREATE只能模拟另一个用户(仅限数据库级别)。它不能模拟另一个登录名(实例级)。此限制导致太多人启用,TRUSTWORTHY以便与被模拟用户的相同 SID 匹配的登录名能够临时授予额外权限。但这是相当危险的,这就是为什么临时提升权限的理想(也是更好)机制是模块签名。
有关为什么模拟以及TRUSTWORTHY ON跨数据库所有权链接不好以及如何/为什么模块签名更好的更多详细信息,请参阅:
| 归档时间: |
|
| 查看次数: |
5366 次 |
| 最近记录: |