为什么在 Azure SQL 数据库中登录有权访问 select 数据库表而不将用户链接到数据库?

Why Login in Azure SQL DB have privilege to select DB tables without linking user to DB?

DB1 中有一些表。我在 Master DB 中创建了 Login MyLogin 而没有为此创建用户(或者我创建但删除了)。但是现在,至少我检查了没有与 MyLogin 具有相同 SID 的用户。为什么我仍然可以有搜索表的权限?

select * from sys.sysusers;   -- Check in DB1 
select * from sys.sql_logins; -- Check in Master DB    

在我们创建登录名之前,我们需要检查登录名是否存在。 演示代码:

DROP LOGIN TestLogin;  
GO  

CREATE LOGIN TestLogin   
WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2;  

SELECT * FROM sys.sql_logins WHERE name = 'TestLogin';  
GO  

参考:CREATE LOGIN (Transact-SQL).

创建登录名后,登录名可以连接到 SQL 数据库,但仅具有授予 public 角色的权限。

但是当你执行ALTER AUTHORIZATION ON DATABASE ::[DB1] TO [MyLogin],然后ALTER AUTHORIZATION ON DATABASE ::[DB1] TO [ServerAdmin]。这意味着将 SQL 数据库的所有者更改为 MyLogin。

请看:ALTER AUTHORIZATION for databases.

我想这就是为什么您仍然可以有搜索表格的特权的原因。

希望对您有所帮助。