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