You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用户rem_test创建表权限被拒,但EXECUTE AS LOGIN可执行,求排查原因

问题分析与解答

1. db_datareader和db_datawriter角色是否包含CREATE TABLE权限?

不包含。这两个角色仅针对数据操作授权:

  • db_datareader:仅允许查询数据库内所有用户表的数据
  • db_datawriter:仅允许对数据库内所有用户表执行增、删、改操作
    两者都没有创建表的权限,用户能创建表必然是通过其他途径获得了权限(比如属于db_owner角色、被直接授予了CREATE TABLE权限,或者是数据库所有者)。

2. 为何执行GRANT CREATE TABLE TO rem_test;时出错?

报错信息明确说明无法给sa、dbo、实体所有者、系统内置主体或者自己授予权限。大概率是你执行这条GRANT命令时,当前登录的账号就是rem_test本身——SQL Server不允许用户给自己授予权限。另外如果rem_test已经是数据库所有者(dbo)或者通过其他角色拥有了CREATE TABLE权限,也会触发该报错。

3. 为何EXECUTE AS测试可行但用户自行操作失败?

核心原因是会话的数据库上下文不一致:

  • 你执行测试时,先执行了USE Test_DB;,切换到目标数据库后再模拟rem_test身份创建表,此时操作的是Test_DB;而用户实际登录后,默认数据库可能不是Test_DB(比如是master),直接执行CREATE TABLE会尝试在默认数据库创建,而该用户在默认数据库没有CREATE TABLE权限,因此报错。
  • 另一种可能:用户登录后没有手动切换到Test_DB,直接执行CREATE TABLE命令,导致会话上下文仍在默认数据库,触发权限不足错误。

验证与解决方法

让用户登录后先执行以下命令确认当前数据库:

SELECT DB_NAME();

如果结果不是Test_DB,先执行USE Test_DB;再创建表,或者在CREATE TABLE时明确指定数据库:

CREATE TABLE Test_DB.dbo.dokument_custom_informationen (id integer not null, information varchar(max) null, value varchar(max) null);

内容的提问来源于stack exchange,提问作者Fuerro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:20:14