如何在Azure SQL中隐藏数据库?

1aaf6o9v  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(137)

我知道有人问了这个问题,但没有一个建议有帮助。我的Azure SQL Server上有多个用户的数据库。
有一个登录名“USER 1”和一个从该登录名创建的用户,该用户是“ASE 1”的所有者。
有一个登录名“USER 2”和一个从该登录名创建的用户,该用户是“ASE 2”的所有者
当USER 1连接到服务器时,它枚举/看到数据库ASE 2。它不能打开它,但可以看到它。
由sysadmin在主数据库或用户数据库上执行的以下命令不起作用:

DENY VIEW ANY DATABASE TO [PUBLIC]

DENY VIEW ANY DATABASE TO [USER1]

错误为:

'Securable class 'server' not supported in the server scope in this version of SQL Server.'
wkyowqbh

wkyowqbh1#

你可以按照以下步骤限制Azure SQL DB中的用户。
当USER1连接到服务器时,它枚举/看到数据库ASE2。它不能打开它,但可以看到它。

    • USER1已被授予VIEW ANY DATABASE权限。如果USER1已被授予Azure SQL Server上的VIEW ANY DATABASE**权限,则他们将能够查看服务器上的所有数据库,即使他们没有访问这些数据库的权限。

使用以下脚本检查Azure SQL数据库上的VIEW ANY DATABASE

SELECT  *  FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name =  'VIEW ANY DATABASE';

这对于单个用户登录是可能的,因为您只能将数据库的所有权分配给单个用户并拒绝VIEW ANY DATABASE,如下所示,请参见Hale创建的Ms Doc
1.右键单击用户数据库下的用户登录(如果存在)并将其删除。
(Note:不要从主安全登录帐户下删除用户)
2.运行以下查询。

USE <customersdatabase> 
    ALTER AUTHORIZATION ON DATABASE::<customerdatabase> to <customerlogin>
    
    USE MASTER
    
    DENY VIEW ANY DATABASE TO <customerlogin>

你还可以从门户禁用对Azure SQL DB的公共访问,如下所示。

    • 转到Azure SQL Server〉网络〉公共访问**。

我可以只看到一个数据库,而不是其他数据库,一旦我登录到用户。

参考:如何隐藏用户无权访问的由-Daniel创建的Microsoft SQL数据库

mec1mxoz

mec1mxoz2#

到目前为止,使用Azure SQL的唯一可能方法似乎是使用所谓的包含用户。用户必须在数据库级别创建,而不链接到登录。SQL中的任何登录都在SQL服务器级别,并且能够看到附加在该服务器上的数据库。(Azure SQL中的限制)
通过对所需数据库运行以下命令来创建用户:

CREATE USER <USERNAME> WITH PASSWORD= 'ExtremelySecretPAss123!';

ALTER ROLE db_datareader ADD MEMBER <USERNAME>; 
ALTER ROLE db_datawriter ADD MEMBER <USERNAME>;

现在要连接到数据库(而不是SQL服务器),应发生以下情况:在SQL Management Studio

中输入SQL服务器、用户名和密码
按“选项”按钮,然后在“连接属性”下输入用户需要登录的数据库名称。

相关问题