Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GCP SQL Server-格兰特&;撤销用户_Sql_Sql Server_Google Cloud Platform - Fatal编程技术网

GCP SQL Server-格兰特&;撤销用户

GCP SQL Server-格兰特&;撤销用户,sql,sql-server,google-cloud-platform,Sql,Sql Server,Google Cloud Platform,我对GCP还是新手。我有一台SQL Server。我有两个用户。第一个是“sqlserver”(这是GCP的默认值)和“userA”(这是新帐户) 我有这么多数据库,我希望“sqlserver”帐户是唯一一个可以访问所有内容的帐户。但对于“userA”,我希望它只能访问1个数据库(比如DatabaseA) 我已尝试撤销选择、拒绝选择、全部撤销。但是userA仍然可以查询其他数据库 有解决办法吗?谢谢您使用GCP SQL Server创建的所有用户都是作为CustomerDbRootRole角色的

我对GCP还是新手。我有一台SQL Server。我有两个用户。第一个是“sqlserver”(这是GCP的默认值)和“userA”(这是新帐户)

我有这么多数据库,我希望“sqlserver”帐户是唯一一个可以访问所有内容的帐户。但对于“userA”,我希望它只能访问1个数据库(比如DatabaseA)

我已尝试撤销选择、拒绝选择、全部撤销。但是userA仍然可以查询其他数据库


有解决办法吗?谢谢

您使用GCP SQL Server创建的所有用户都是作为CustomerDbRootRole角色的成员创建的,并且具有与SQL Server用户相同的权限

您可以使用命令更改任何用户的权限

例如,您可以使用以下脚本从CustomerDbRootRole中删除用户:

  ALTER ROLE CustomerDbRootRole DROP MEMBER YourUser; 
此外,我建议您通过以下查询检查所有YourUser的权限:

SELECT 
    DB_NAME() AS DB
    ,P.name   AS Database_Principal
    ,P2.name  AS Ruolo
    ,P.type_desc
    ,P.create_date
FROM
    sys.database_principals P 
    INNER JOIN sys.database_role_members R ON R.member_principal_id = P.principal_id
    INNER JOIN sys.database_principals P2  ON P2.principal_id = R.role_principal_id 
WHERE
     P.[name] IN ('YourUser')
ORDER BY
     P.[name]
之后,您可以像上面那样使用ALTER ROLE撤销所有不必要的权限

在您的情况下,如果希望仅将单个数据库的读取权限授予特定用户,我建议:

1-创建用户:

USE [YourDB]
GO

CREATE USER [YourUser] WITH DEFAULT_SCHEMA=[dbo]
GO
2-将您的用户xxx添加到db_datareader角色中:

USE [YourDB]
GO

ALTER ROLE db_datareader ADD MEMBER [YourUser]
GO

使用GCP SQL Server创建的所有用户都是作为CustomerDbRootRole角色的成员创建的,并且具有与SQL Server用户相同的权限

您可以使用命令更改任何用户的权限

例如,您可以使用以下脚本从CustomerDbRootRole中删除用户:

  ALTER ROLE CustomerDbRootRole DROP MEMBER YourUser; 
此外,我建议您通过以下查询检查所有YourUser的权限:

SELECT 
    DB_NAME() AS DB
    ,P.name   AS Database_Principal
    ,P2.name  AS Ruolo
    ,P.type_desc
    ,P.create_date
FROM
    sys.database_principals P 
    INNER JOIN sys.database_role_members R ON R.member_principal_id = P.principal_id
    INNER JOIN sys.database_principals P2  ON P2.principal_id = R.role_principal_id 
WHERE
     P.[name] IN ('YourUser')
ORDER BY
     P.[name]
之后,您可以像上面那样使用ALTER ROLE撤销所有不必要的权限

在您的情况下,如果希望仅将单个数据库的读取权限授予特定用户,我建议:

1-创建用户:

USE [YourDB]
GO

CREATE USER [YourUser] WITH DEFAULT_SCHEMA=[dbo]
GO
2-将您的用户xxx添加到db_datareader角色中:

USE [YourDB]
GO

ALTER ROLE db_datareader ADD MEMBER [YourUser]
GO

这个答案有用吗?你是否遇到同样的问题?这不起作用。由于缺少
CustomerDbRootRole
的权限,
ALTER-ROLE
CREATE-USER
命令失败。此外,权限列表奇怪地没有返回任何内容。因此,在我看来,猫咬了自己的尾巴,没有办法离开
CustomerDbRootRole
。这个答案有用吗?你是否遇到了同样的问题?这不起作用。由于缺少
CustomerDbRootRole
的权限,
ALTER-ROLE
CREATE-USER
命令失败。此外,权限列表奇怪地没有返回任何内容。因此,在我看来,猫咬自己的尾巴,没有办法走出
定制Brootrole