AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 74679
Accepted
usr
usr
Asked: 2014-08-23 06:47:28 +0800 CST2014-08-23 06:47:28 +0800 CST 2014-08-23 06:47:28 +0800 CST

将 sysadmin 角色与 EXECUTE AS 一起使用

  • 772

我的理解是,我可以将该EXECUTE AS OWNER子句用作我创建的过程的一部分,以使该过程的主体作为不同的用户运行。我的目标是执行一个需要sysadmin角色 ( DBCC TRACEON(1224)) 的命令。此过程应该由非特权用户调用。

我在用户下运行了以下脚本sa:

SELECT USER_NAME(), USER_ID(), IsSysAdmin = IS_SRVROLEMEMBER('sysadmin')
-- dbo  1   1

IF EXISTS(SELECT * FROM sys.procedures WHERE name = 'MyProc')
    DROP PROCEDURE MyProc

GO
CREATE PROCEDURE MyProc
WITH EXECUTE AS OWNER
AS 
    SELECT USER_NAME(), USER_ID(), IsSysAdmin = IS_SRVROLEMEMBER('sysadmin');
-- dbo  1   0

    DBCC TRACEON(1224)
--Msg 2571, Level 14, State 3, Procedure MyProc, Line 7
--User 'dbo' does not have permission to run DBCC TRACEON.

RETURN
GO

EXEC MyProc

输出在注释中内联。事实证明,在程序之外,我似乎拥有sysadmin会员资格,但在程序内部却没有。

该过程归dbo用户所有。我知道不可能将sysadmin角色授予数据库用户(至少 GUI 不提供这种可能性)。所以我看不出我怎么能让数据库用户拥有服务器角色。

我也尝试EXECUTE AS 'sa'了哪个结果Cannot execute as the user 'sa', because it does not exist or you do not have permission.。文档指出我只能指定用户名,而不是登录名。所以我明白为什么这不起作用。

如何使用sysadmin角色成员身份运行我的程序?

sql-server security
  • 3 3 个回答
  • 11221 Views

3 个回答

  • Voted
  1. Kin Shah
    2014-08-23T07:38:23+08:002014-08-23T07:38:23+08:00

    我的目标是执行需要 sysadmin 角色的命令 (DBCC TRACEON(1224))

    通过允许非特权用户以 sysadmin 角色运行,您在安全性上打了一个洞。

    如果您尝试设置1224traceflag,它会根据锁的数量禁用锁升级,您可以在表级别使用ALTER TABLE

    例如,下面可以将锁升级到分区表上的分区级别。如果表未分区,则在 TABLE 级别设置锁升级。

    ALTER TABLE dbo.T1 SET (LOCK_ESCALATION = AUTO);-- 有效选项为 AUTO、TABLE 和 DISABLE

    现在您可以只授予非特权用户更改表权限。

    高温高压

    • 6
  2. Best Answer
    Kenneth Fisher
    2014-08-23T07:13:54+08:002014-08-23T07:13:54+08:00

    它可以完成,但通常被认为是相当危险的。在一个非常基本的级别上,您trustworthy在数据库上设置标志,然后在execute assp 上使用您时,它可以利用它的服务器级别主体安全访问。

    由于这是多么危险,我不想在这里详细介绍。但是,我已经在此处发布了有关它的博客,并提供了有关如何执行此操作的具体说明。

    话虽如此,请确保您绝对NEED这样做。你正在打开一个很大的安全漏洞。如果您决定这样做,请将您的 SP 放入它自己的数据库中,并且只授予用户连接和执行对 sp 的访问权限。

    • 5
  3. Daniel Hutmacher
    2014-08-23T07:00:36+08:002014-08-23T07:00:36+08:00

    创建一个 SQL Server 代理作业(由系统管理员成员拥有)可以解决问题,尽管我意识到这不是一个非常漂亮的解决方案。

    用户可以使用 msdb.dbo.sp_start_job 启动作业(异步)。但是,如果需要,同步运行代理作业需要多几行代码。此外,显然,您需要启动并运行 SQL Server 代理服务。

    • 0

相关问题

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 存储过程可以防止 SQL 注入吗?

  • 死锁的主要原因是什么,可以预防吗?

  • 保护数据库密码

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve