login - 为什么在 Azure SQL DB 中登录有权选择 DB 表而不将用户链接到 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
创建登录后,登录可以连接到 SQL 数据库,但只有授予公共角色的权限。
但是当你表演 的时候ALTER AUTHORIZATION ON DATABASE ::[DB1] TO [MyLogin]
,那么 ALTER AUTHORIZATION ON DATABASE ::[DB1] TO [ServerAdmin]
。这意味着将 SQL 数据库的所有者更改为 MyLogin。
请参阅:ALTER AUTHORIZATION for databases。
我认为这就是为什么您仍然有权搜索表格的原因。
希望这可以帮助。
推荐阅读
- rust - 如何在 Rust 中为返回的元组设置静态生命周期?
- yaml - Jekyll config.yml 错误:解析块集合时未找到预期的“-”指示符
- optimization - Pytorch 根据 epoch 数改变学习率
- linux - 嵌套 for 循环中的命令和变量
- arrays - 如何在 J/APL 中实现 minikanren 'appendo'?
- c# - 如何基于 Azure AD 组进行授权?
- python - 我创建了一个 REST api,它基本上显示了一些数据。我需要使用 $http 让这些数据通过 angularjs 显示
- ruby - 覆盖 Jekyll Block 插件中的上下文寄存器
- javascript - 添加到继承类中可用的类原型的方法吗?
- angular - 伊斯坦布尔突出显示 html 报告中的错误行