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 / 问题 / 338711
Accepted
Yossi Geretz
Yossi Geretz
Asked: 2024-04-17 06:59:49 +0800 CST2024-04-17 06:59:49 +0800 CST 2024-04-17 06:59:49 +0800 CST

当该用户的登录在数据库服务器上被停用时,该用户如何登录到数据库服务器?

  • 772

我已经专门禁用了数据库服务器上的登录。这是 Azure 托管的 SQL 即服务数据库。

alter login [********@hotmail.com] disable

这是服务器上登录的样子。正如您所看到的,图标上的红色 X 表示它实际上已被禁用。

在此输入图像描述

然而,我可以登录服务器并访问为其定义该用户的数据库。这怎么可能?如果禁用数据库服务器上的登录并不能阻止该帐户登录数据库服务器,那么禁用该帐户又意味着什么呢?

在此输入图像描述

我已经使用来自两个不同身份验证域的两个不同帐户测试了此行为。他们都表现出相同的行为。

我想要做的是在数据库中定义用户,以便该用户可以访问只读副本服务器上的数据库,但从主服务器禁用(或以其他方式删除)相应的登录名,以便该用户不会被能够访问主服务器上的主数据库。但是我发现,将 Microsoft Entra (Azure AD) 帐户定义为特定数据库上的用户后,如果服务器上定义了相应的登录名,或者服务器上没有定义登录名,则绝对没有区别,或者如果服务器上定义了登录名,但它被明确禁用。这是处理外部用户帐户登录方式的错误吗?我对登录/用户关系的理解是,首先需要在服务器上有良好信誉的登录,这是登录数据库服务器时检查的第一件事。这不正确吗?

新的信息:

即使对于 SQL Server 用户,我也看到了这种行为。我可以简单地在数据库中创建一个 SQL Server 用户,然后登录来访问该数据库,而无需创建服务器登录名。这种行为正是我们对包含数据库的期望。(https://learn.microsoft.com/en-us/sql/relational-databases/databases/contained-databases?view=sql-server-ver16)但数据库未包含!

在此输入图像描述

因此数据库未被包含,但连接表现出我们期望包含的所有行为。这里是否正在进行部分遏制?我如何确定是否属于这种情况?如果是这种情况,我将如何重新配置​​数据库,以便连接遵循传统的服务器登录 -> 数据库用户模型?

sql-server
  • 2 2 个回答
  • 75 Views

2 个回答

  • Voted
  1. David Browne - Microsoft
    2024-04-18T03:18:18+08:002024-04-18T03:18:18+08:00

    包含的数据库用户始终在 Azure SQL 数据库中可用。

    创建用户帐户

    • 在数据库中创建用户需要访问的用户帐户(也称为包含用户)。

    使用 SQL 数据库,您始终可以创建此类用户帐户。通过支持 Microsoft Entra 服务器主体的 SQL 托管实例,您可以创建用户帐户来对 SQL 托管实例进行身份验证,而无需将数据库用户创建为包含的数据库用户。

    https://learn.microsoft.com/en-us/azure/azure-sql/database/logins-create-manage?view=azuresql#create-accounts-for-non-administrator-users

    • 1
  2. Best Answer
    Yossi Geretz
    2024-04-19T03:37:48+08:002024-04-19T03:37:48+08:00

    我的问题是,我正在创建一个服务器登录,然后创建一个数据库用户,但我没有将用户连接到登录。因此,用户实际上是一个包含的用户,即使我的数据库本身没有定义为包含的。

    创建非包含(即“传统”)用户并与其关联的服务器登录绑定的正确语法(向 David Browne - Microsoft 致敬)如下:

    Master: create login [[email protected]] from external provider
    App DB: create user [[email protected]] for login [[email protected]]
    

    然后,我停用(或删除)主服务器中的登录名,并在副本服务器中创建登录名(使用第一个 SQL 语句,如上所示)。这正是我所需要的!Alice 现在可以连接到副本服务器上的数据库,但无法连接到主服务器上的数据库。(实际上,由于某种奇怪的原因,Alice 能够连接到主服务器,可以看到服务器上的所有数据库,但被拒绝访问这些数据库中的所有对象。不知道为什么会以这种方式工作,但最终效果是我所需要的 - Alice 无法查询或以其他方式操作主服务器上数据库中的任何数据。)

    以下是有关数据库包含和连接身份验证模型的文章的一些链接。

    https://learn.microsoft.com/en-us/sql/relational-databases/databases/contained-databases?view=sql-server-ver16

    https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user?view=sql-server-ver16

    如图所示,并非每个身份验证流程都需要在服务器上登录。某些用户定义完全包含在其数据库中,并且身份验证绕过任何服务器登录。

    在此输入图像描述

    • 0

相关问题

  • 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