gpt4 book ai didi

sql-server-2005 - 临时表上的 DBCC CHECKIDENT 为错误的用户抛出权限错误

转载 作者:行者123 更新时间:2023-12-04 10:06:24 27 4
gpt4 key购买 nike

我以非 sa 用户“bhk”身份登录到 SQL Server 2005 数据库,该用户仅是“公共(public)”服务器角色的成员。以下代码尝试在用户“bhk”调用的存储过程中执行。这行代码...

TRUNCATE TABLE #Table1
DBCC CHECKIDENT('#Table1', RESEED, @SequenceNumber) WITH NO_INFOMSGS

导致此错误...

User 'guest' does not have permission to run DBCC CHECKIDENT for object
'#Table1__00000000007F'.



我知道运行 DBCC CHECKIDENT 所需的权限...
调用者必须拥有表 ,或者是 sysadmin 固定服务器角色、db_owner 固定数据库角色或 db_ddladmin 固定数据库角色的成员。

所以我有两个问题:
  • 由于'bhk'正在调用存储
    创建临时的过程
    表,不应该是“bhk”的所有者
    并被允许运行 DBCC
    检查员?
  • 为什么会出现错误
    消息返回该用户'guest'
    没有权限?据我所知,我不是
    以“访客”身份登录。

  • 任何帮助将不胜感激。

    最佳答案

    你写了:

    "Caller must own the table, or be a member of the sysadmin fixed server role, the db_owner fixed."



    所以(如果它不是一个错误),根据 Lieutenant Columbo's无可挑剔的逻辑,每个前提都必须是错误的。这意味着, 调用者不拥有该表,即使他创造了它。

    事实上,似乎所有在 tempd 中创建的对象由 dbo 所有默认情况下。如果您在查询分析器中执行以下操作,您可以检查它:
  • 使用低权限用户连接到您的数据库。
  • 执行:CREATE TABLE #NotMyTable (TestID int identity)
  • 连接到同一 SQL Server 的 tempdb 作为 dbo
  • 执行:SELECT user_name(uid) FROM sysobjects WHERE name LIKE '#NotMyTable%'

  • 您会看到 dbo 是临时表的所有者。

    那么,有什么办法可以解决呢?

    (前言:我不喜欢那种操纵,但智力刺激正在驱使我……;-))

    因此,您可以编写另一个存储过程,将 tempdb 的 sysobjects 中的 UID 更新为用户的值(颤抖!)。我只在查询分析器中对其进行了测试。更新后我可以执行您的 DBCC CHECKIDENT 命令。

    关于sql-server-2005 - 临时表上的 DBCC CHECKIDENT 为错误的用户抛出权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/187920/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com