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 / 问题 / 188266
Accepted
AnthonyVO
AnthonyVO
Asked: 2017-10-12 12:58:52 +0800 CST2017-10-12 12:58:52 +0800 CST 2017-10-12 12:58:52 +0800 CST

如何检测 Azure SQL Server 上的“服务器管理员”用户

  • 772

以下文章介绍了 AZURE“服务器管理员”用户。 https://learn.microsoft.com/en-us/azure/sql-database/sql-database-manage-logins

该用户可以访问每个数据库,但不幸的是 HAS_DBACCESS(%database_name%) 函数无法返回 1,因此我需要其他方法来检测该用户并识别他们可以访问所有数据库。

我尝试了许多其他方法,包括:

  • IS_MEMBER ('db_owner')
  • IS_SRVROLEMEMBER ('serveradmin')
  • IS_SRVROLEMEMBER('系统管理员')

注意:奇怪的是,HAS_DBACCESS(%database_name%) 实际上返回 NULL。

任何建议将不胜感激。

以下查询是在以rootadmin 身份登录时从 Master 数据库运行的,这是我的服务器管理员用户的名称。

编辑:当我切换到使用“Demo”数据库时,查询结果发生了变化,HAS_DBACCESS(t.name) 为 Master 数据库返回 NULL,为“Demo”数据库返回“1”。

所以现在我很困惑。

在此处输入图像描述

sql-server azure
  • 1 1 个回答
  • 3074 Views

1 个回答

  • Voted
  1. Best Answer
    Sting
    2017-10-12T16:26:34+08:002017-10-12T16:26:34+08:00

    使用 Microsoft SQL Azure 数据库,您的用户将不是任何服务器角色的成员,您也无权访问该信息。因此,IS_SRVROLEMEMBER 实际上会返回零。您只能在数据库级别而不是服务器级别访问——除非您构建和使用 SQL VM。

    从 Microsoft 文档中,您可以使用以下内容对此进行测试:

    IF IS_SRVROLEMEMBER ('sysadmin') = 1  
    print 'Current user''s login is a member of the sysadmin role'  
    ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0  
    print 'Current user''s login is NOT a member of the sysadmin role'  
    ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL  
    print 'ERROR: The server role specified is not valid.';  
    

    但是,您的用户将有权访问数据库级别的角色。从 Microsoft 文档中,您可以测试此示例:

    IF IS_ROLEMEMBER ('db_datareader') = 1  
    print 'Current user is a member of the db_datareader role'  
    ELSE IF IS_ROLEMEMBER ('db_datareader') = 0  
    print 'Current user is NOT a member of the db_datareader role'  
    ELSE IF IS_ROLEMEMBER ('db_datareader') IS NULL  
    print 'ERROR: The database role specified is not valid.';  
    

    但是有一个警告,您需要在您的个人数据库而不是主数据库的上下文中(我的数据库称为 TESTING):

    在此处输入图像描述

    一旦您处于正确的数据库上下文中,以下函数等就会按预期工作:

    select HAS_DBACCESS('testing')
    
    select IS_MEMBER('db_owner')
    

    笔记:

    select HAS_DBACCESS('db_name') 将返回 NULL 值,因为没有名为 'db_name' 的数据库。您可以将其更改为 db_name() 函数。例如,

    select HAS_DBACCESS(db_name()) 
    

    或者,硬编码数据库名称——在我的例子中是 TESTING。

    select HAS_DBACCESS('TESTING') 
    
    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

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

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

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

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