En esta página se explica cómo configurar el control de acceso granular para bases de datos de Spanner con dialecto de GoogleSQL y con dialecto de PostgreSQL.
Para obtener información sobre el control de acceso pormenorizado, consulta Información sobre el control de acceso pormenorizado.
Para configurar el control de acceso pormenorizado, sigue estos pasos:
Los usuarios con control de acceso pormenorizado deben especificar un rol de base de datos para realizar consultas, DML u operaciones de filas en la base de datos.
Antes de empezar
Asegúrate de que a cada principal que vaya a ser un usuario de control de acceso granular se le asigne el rol de gestión de identidades y accesos Cloud Spanner Viewer
(roles/spanner.viewer
).
Se recomienda asignar este rol a nivel de proyecto a los usuarios que deban interactuar con recursos de Spanner en la Google Cloud consola.
Para ver las instrucciones, consulta Conceder permisos a principales.
Crear roles de base de datos y conceder privilegios
Un rol de base de datos es un conjunto de privilegios de acceso pormenorizados. Puede crear hasta 100 roles de base de datos por cada base de datos.
Decide los roles y las jerarquías de roles de tu base de datos y codifícalos en DDL. Al igual que con otros cambios de esquema en Spanner, te recomendamos que hagas los cambios de esquema en un lote en lugar de por separado. Para obtener más información, consulta Limitar la frecuencia de las actualizaciones de esquemas.
Consola
Para crear un rol de base de datos y concederle privilegios de acceso detallados, sigue estos pasos:
Ve a la página Instancias de la Google Cloud consola.
Selecciona la instancia que contiene la base de datos a la que quieres añadir el rol.
Selecciona la base de datos.
En la página Resumen, haz clic en Spanner Studio.
En la página Spanner Studio, sigue estos pasos para cada rol de base de datos que quieras crear y al que quieras conceder privilegios:
Para crear el rol, introduce la siguiente instrucción:
CREATE ROLE ROLE_NAME;
No hagas clic en Enviar todavía.
Para conceder privilegios al rol, introduce una instrucción
GRANT
en la línea siguiente a la instrucciónCREATE ROLE
.Para obtener información detallada sobre la sintaxis de la instrucción
GRANT
, consulta Lenguaje de definición de datos de GoogleSQL. Para obtener información sobre los privilegios, consulta Privilegios de control de acceso pormenorizado.Por ejemplo, para conceder los permisos
SELECT
,INSERT
yUPDATE
en las tablasemployees
ycontractors
al rol de base de datoshr_manager
, introduce la siguiente instrucción:GoogleSQL
GRANT SELECT, INSERT, UPDATE ON TABLE employees, contractors TO ROLE hr_manager;
PostgreSQL
GRANT SELECT, INSERT, UPDATE ON TABLE employees, contractors TO hr_manager;
Puede usar una plantilla de DDL para la instrucción
GRANT
. En el panel Explorador, vaya al rol al que quiera conceder privilegios. Haz clic en Ver acciones y selecciona el tipo de privilegio al que quieras conceder acceso para este rol. LaGRANT
plantilla de la instrucción se rellena en una nueva pestaña del editor.
Haz clic en Enviar.
Si hay errores en tu DDL, la consola devuelve un error. Google Cloud
gcloud
Para crear un rol de base de datos y concederle privilegios de acceso pormenorizados, usa el comando gcloud spanner databases ddl update
con las instrucciones CREATE ROLE
y GRANT
.
Para obtener información sobre la sintaxis de las instrucciones CREATE ROLE
y GRANT
, consulta Lenguaje de definición de datos de GoogleSQL.
Por ejemplo, usa el siguiente comando para crear un rol de base de datos y concederle privilegios en una o varias tablas.
GoogleSQL
gcloud spanner databases ddl update DATABASE_NAME --instance=INSTANCE_NAME \ --ddl='CREATE ROLE ROLE_NAME; GRANT PRIVILEGES ON TABLE TABLES TO ROLE ROLE_NAME;'
PostgreSQL
gcloud spanner databases ddl update DATABASE_NAME --instance=INSTANCE_NAME \ --ddl='CREATE ROLE ROLE_NAME; GRANT PRIVILEGES ON TABLE TABLES TO ROLE_NAME;'
Haz los cambios siguientes:
PRIVILEGES
es una lista de privilegios de control de acceso pormenorizado separados por comas. Para obtener información sobre los privilegios, consulta Privilegios de control de acceso pormenorizado.TABLES
es una lista de tablas separadas por comas.
Por ejemplo, para conceder SELECT
, INSERT
y UPDATE
en las tablas employees
y contractors
al rol de base de datos hr_analyst
en la base de datos hrdb1
de la instancia hr
, introduce la siguiente instrucción:
GoogleSQL
gcloud spanner databases ddl update hrdb1 --instance=hr \ --ddl='CREATE ROLE hr_analyst; GRANT SELECT, INSERT, UPDATE ON TABLE employees, contractors TO ROLE hr_analyst;'
PostgreSQL
gcloud spanner databases ddl update hrdb1 --instance=hr \ --ddl='CREATE ROLE hr_analyst; GRANT SELECT, INSERT, UPDATE ON TABLE employees, contractors TO hr_analyst;'
Bibliotecas de cliente
Ambos ejemplos de código crean y eliminan un rol de base de datos.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Crear una jerarquía de roles con herencia
Puede crear una jerarquía de roles de base de datos concediendo un rol de base de datos a otro. Los roles secundarios (también llamados roles de miembro) heredan los privilegios del rol principal.
Para conceder un rol de base de datos a otro rol de base de datos, usa la siguiente instrucción:
GoogleSQL
GRANT ROLE role1 TO ROLE role2;
PostgreSQL
GRANT role1 TO role2;
Para obtener más información, consulta el artículo sobre jerarquías y herencias de roles de base de datos.
Asignar roles de base de datos a principales
Para acceder a los recursos de Spanner, se debe conceder a una entidad el rol de base de datos necesario mediante una de las siguientes opciones:
Consola
En la página Información general de la base de datos, haga clic en MOSTRAR PANEL DE INFORMACIÓN si el panel de información aún no está abierto.
Haz clic en AÑADIR PRINCIPAL.
En Añadir principales, en Nuevos principales, introduce uno o varios principales.
En Asignar roles, en Seleccionar un rol, selecciona Cloud Spanner > Usuario de acceso granular de Cloud Spanner.
Solo tienes que asignar este rol una vez a cada principal. Convierte a la entidad de seguridad en un usuario con control de acceso pormenorizado.
Haz clic en AÑADIR OTRO ROL.
En Seleccionar un rol, selecciona Cloud Spanner > Usuario de rol de base de datos de Cloud Spanner.
Sigue estos pasos para crear la condición de IAM que especifica los roles que se van a conceder.
Junto al rol de usuario de la base de datos de Cloud Spanner, haz clic en AÑADIR CONDICIÓN DE GIA.
En el panel Añadir condición, introduce un título y una descripción opcional de la condición.
Si asignas un solo rol de base de datos, normalmente incluyes el nombre del rol en el título de la condición. Si asignas varios roles, puedes indicar algo sobre el conjunto de roles.
Haz clic en Editor de condiciones.
En el campo Expresión, introduce el siguiente código:
resource.type == "spanner.googleapis.com/DatabaseRole" && resource.name.endsWith("/ROLE")
Sustituye
ROLE
por el nombre de tu rol.Para asignar más de un rol a la cuenta principal, añade más condiciones con el operador or (
||
), como se muestra en el siguiente ejemplo:resource.type == "spanner.googleapis.com/DatabaseRole" && (resource.name.endsWith("/ROLE1") || resource.name.endsWith("/ROLE2"))
Este código concede dos roles. Sustituye
ROLE1
yROLE2
por los nombres de tus roles. Para conceder más de dos roles, añade más condiciones o.Puedes usar cualquier expresión de condición compatible con IAM. Para obtener más información, consulta la descripción general de las condiciones de gestión de identidades y accesos.
Haz clic en Guardar.
Comprueba que la condición aparece en la columna Condición de gestión de identidades y accesos situada junto al campo Rol.
Haz clic en Guardar.
En el panel de información, en Rol o principal, observa que Usuario del rol de base de datos de Cloud Spanner aparece en cada condición definida.
El número entre paréntesis que aparece junto a la condición indica el número de principales a los que se les ha concedido el rol de base de datos mediante esa condición. Puedes hacer clic en la flecha para desplegar la lista de principales.
Para corregir errores en los nombres o las condiciones de los roles de la base de datos, o para añadir roles de base de datos adicionales a un principal, sigue estos pasos:
Expande la entrada Usuario de rol de base de datos de Cloud Spanner que contiene la condición que quieras.
Haz clic en el icono Editar (lápiz) situado junto a un principal.
En el panel Editar acceso a database_name, haga una de las siguientes acciones:
Haz clic en AÑADIR OTRO ROL.
Para editar la condición, haz clic en el icono Editar (lápiz) situado junto al nombre de la condición. A continuación, en la página Editar condición, haz clic en Editor de condiciones, haz las correcciones y haz clic en Guardar dos veces.
gcloud
Para habilitar el control de acceso pormenorizado del principal, usa el comando
gcloud spanner databases add-iam-policy-binding
de la siguiente manera:gcloud spanner databases add-iam-policy-binding DATABASE_NAME \ --instance=INSTANCE_NAME \ --role=roles/spanner.fineGrainedAccessUser \ --member=MEMBER_NAME \ --condition=None
MEMBER_NAME
es el identificador de la entidad principal. Debe usar una de las siguientes sintaxis:user|group|serviceAccount:email
odomain:domain
.Este comando convierte a la entidad de seguridad en un usuario con control de acceso pormenorizado. Envía este comando solo una vez por cada principal.
Si la acción se realiza correctamente, el comando muestra toda la política de la base de datos.
Concede permiso para usar uno o varios roles de base de datos con el comando
gcloud spanner databases add-iam-policy-binding
de la siguiente manera:gcloud spanner databases add-iam-policy-binding DATABASE_NAME \ --instance=INSTANCE_NAME \ --role=roles/spanner.databaseRoleUser \ --member=MEMBER_NAME \ --condition=CONDITION
MEMBER_NAME
es el identificador de la entidad principal. Debe usar una de las siguientes sintaxis:user|group|serviceAccount:email
odomain:domain
.CONDITION
es una expresión de condición de gestión de identidades y accesos que especifica los roles que se deben conceder a la entidad principal.CONDITION
tiene el siguiente formato:--condition='expression=(resource.type == "spanner.googleapis.com/DatabaseRole" && resource.name.endsWith("/ROLE1")),title=TITLE,description=DESCRIPTION'
También puedes conceder acceso al principal a más de un rol. Para ello, añade más condiciones con el operador or (
||
), como se muestra en el siguiente ejemplo:--condition='expression=(resource.type == "spanner.googleapis.com/DatabaseRole" && (resource.name.endsWith("/ROLE1") || resource.name.endsWith("/ROLE2"))),title=TITLE,description=DESCRIPTION'
Este código concede dos roles. Sustituye
ROLE1
yROLE2
por los nombres de tus roles. Para conceder más de dos roles, añade más condiciones o con el operador||
.Puedes usar cualquier expresión de condición compatible con IAM. Para obtener más información, consulta la descripción general de las condiciones de gestión de identidades y accesos.
Si la acción se realiza correctamente, el comando muestra toda la política de la base de datos.
En el siguiente ejemplo se conceden los roles de base de datos
hr_rep
yhr_manager
al principaljsmith@example.com
.gcloud spanner databases add-iam-policy-binding myDatabase \ --instance=myInstance \ --role=roles/spanner.databaseRoleUser \ --member=user:jsmith@example.com \ --condition='expression=(resource.type == "spanner.googleapis.com/DatabaseRole" && (resource.name.endsWith("/hr_rep") || resource.name.endsWith("/hr_manager"))),title=HR roles,description=Grant permissions on HR roles'
Bibliotecas de cliente
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Informa a los usuarios y desarrolladores para que empiecen a usar roles de base de datos
Una vez que se haya completado la configuración inicial del control de acceso detallado, informa a los usuarios y a los desarrolladores de aplicaciones de que deben empezar a usar roles de base de datos.
Los usuarios con control de acceso pormenorizado deben empezar a especificar un rol de base de datos cuando accedan a las bases de datos de Spanner a través de la consola Google Cloud o de la CLI de Google Cloud.
Las aplicaciones que usan un control de acceso pormenorizado deben especificar un rol de base de datos al acceder a la base de datos.
Para obtener más información, consulta Acceder a una base de datos con un control de acceso pormenorizado.
Cambiar un principal al control de acceso pormenorizado
Para cambiar el control de acceso de un principal de nivel de base de datos a un control de acceso pormenorizado, sigue estos pasos:
Habilita el control de acceso pormenorizado para la entidad de seguridad y concede acceso a todos los roles de base de datos necesarios, tal como se describe en Conceder roles de base de datos a entidades de seguridad.
Actualiza todas las aplicaciones que se ejecuten como esta entidad. Especifica los roles de base de datos adecuados en las llamadas a los métodos de la biblioteca de cliente.
Revoca todos los roles de gestión de identidades y accesos a nivel de base de datos del principal. De esta forma, el acceso de la entidad se rige por un solo método.
Excepción: Para interactuar con los recursos de Spanner en la consola deGoogle Cloud , todos los usuarios deben tener el rol de gestión de identidades y accesos
roles/spanner.viewer
.Para revocar roles de gestión de identidades y accesos a nivel de base de datos, sigue las instrucciones que se indican en Eliminar permisos a nivel de base de datos.
Mostrar roles de base de datos
.Puedes enumerar los roles de base de datos asociados a una base de datos.
Consola
Para enumerar los roles de la base de datos, introduce la siguiente consulta en la página de Spanner Studio de la base de datos:
GoogleSQL
SELECT * FROM INFORMATION_SCHEMA.ROLES;
PostgreSQL
SELECT * FROM information_schema.enabled_roles;
La respuesta incluye el rol actual y los roles cuyos privilegios puede usar el rol actual mediante la herencia. Para obtener todos los roles, usa el comando de la CLI de Google Cloud.
gcloud
Para obtener una lista sin filtrar de los roles de la base de datos, introduce el siguiente comando.
Requiere el permiso spanner.databaseRoles.list
.
gcloud spanner databases roles list --database=DATABASE_NAME --instance=INSTANCE_NAME
Bibliotecas de cliente
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Ver los privilegios concedidos a un rol de base de datos
Para ver los privilegios concedidos a un rol, ejecuta las siguientes consultas:
GoogleSQL
SELECT * FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES WHERE grantee = 'ROLE_NAME'; SELECT * FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES WHERE grantee = 'ROLE_NAME'; SELECT * FROM INFORMATION_SCHEMA.CHANGE_STREAM_PRIVILEGES WHERE grantee = 'ROLE_NAME';
INFORMATION_SCHEMA.TABLE_PRIVILEGES
devuelve los privilegios de las tablas y las vistas. Los privilegios SELECT
, INSERT
y UPDATE
de TABLE_PRIVILEGES
también se muestran en COLUMN_PRIVILEGES
.
PostgreSQL
SELECT * FROM information_schema.table_privileges WHERE grantee = 'ROLE_NAME'; SELECT * FROM information_schema.column_privileges WHERE grantee = 'ROLE_NAME'; SELECT * FROM information_schema.change_stream_privileges WHERE grantee = 'ROLE_NAME';
information_schema.table_privileges
devuelve los privilegios de las tablas y las vistas.
Los privilegios SELECT
, INSERT
y UPDATE
de table_privileges
también se muestran en column_privileges
.
Ver los usuarios con control de acceso pormenorizado
Para ver una lista de las entidades de seguridad que son usuarios con control de acceso granular, ejecuta el siguiente comando. Para ejecutar el comando, debes tener habilitada la API Cloud Asset en tu proyecto y tener el permiso de gestión de identidades y accesos cloudasset.assets.searchAllIamPolicies
.
gcloud asset search-all-iam-policies \ --scope=projects/PROJECT_NAME \ --query='roles=roles/spanner.fineGrainedAccessUser AND resource=//spanner.googleapis.com/projects/PROJECT_NAME/instances/INSTANCE_NAME/databases/DATABASE_NAME' \ --flatten=policy.bindings[].members[] \ --format='table(policy.bindings.members)'
La salida es similar a la siguiente:
MEMBERS user:222larabrown@gmail.com user:baklavainthebalkans@gmail.com serviceAccount:cs-fgac-sa-1@cloud-spanner-demo.google.com.iam.gserviceaccount.com serviceAccount:cs-fgac-sa-2@cloud-spanner-demo.google.com.iam.gserviceaccount.com
Para obtener más información, consulta el artículo sobre cómo habilitar una API en tu proyecto de Google Cloud .
Ver las entidades con acceso a la base de datos
Para ver una lista de las entidades a las que se ha concedido acceso a una base de datos concreta, ejecuta los siguientes comandos. Para ejecutar estos comandos, debes tener habilitada la API Cloud Asset en tu proyecto y tener el permiso de gestión de identidades y accesos cloudasset.assets.searchAllIamPolicies
.
gcloud asset search-all-iam-policies \ --scope=projects/PROJECT_NAME \ --query='roles=roles/spanner.databaseRoleUser AND policy:"resource.name" AND policy:/ROLE_NAME AND resource=//spanner.googleapis.com/projects/PROJECT_NAME/instances/INSTANCE_NAME/databases/DATABASE_NAME' \ --flatten=policy.bindings[].members[] \ --format='table(policy.bindings.members)'
La salida es similar a la siguiente:
MEMBERS 222larabrown@gmail.com
Ver las condiciones de gestión de identidades y accesos de un principal
Para ver una lista de las condiciones de gestión de identidades y accesos que se especificaron al conceder el rol Usuario de rol de base de datos de Cloud Spanner a una entidad, ejecuta el siguiente comando:
gcloud asset search-all-iam-policies \ --scope=projects/PROJECT_NAME \ --query='roles=roles/spanner.databaseRoleUser AND policy:resource.name AND policy:"PRINCIPAL_IDENTIFIER" AND resource=//spanner.googleapis.com/projects/PROJECT_NAME/instances/INSTANCE_NAME/databases/DATABASE_NAME' \ --flatten=policy.bindings[] \ --format='table(policy.bindings.condition.expression)'
donde PRINCIPAL_IDENTIFIER es:
{ user:user-account-name | serviceAccount:service-account-name }
Ejemplos de PRINCIPAL_IDENTIFIER:
user:222larabrown@gmail.com serviceAccount:cs-fgac-sa-1@cloud-spanner-demo.google.com.iam.gserviceaccount.com
En el siguiente ejemplo de salida se muestran dos expresiones de condición.
EXPRESSION resource.type == "spanner.googleapis.com/DatabaseRole" && resource.name.endsWith("/hr_analyst") resource.type == "spanner.googleapis.com/DatabaseRole" && resource.name.endsWith("/hr_manager")
Comprobar si faltan condiciones de rol de base de datos en las políticas de gestión de identidades y accesos
Una vez que hayas concedido acceso a los roles de base de datos a las entidades principales, te recomendamos que te asegures de que cada enlace de gestión de identidades y accesos tenga una condición especificada.
Para realizar esta comprobación, ejecuta el siguiente comando:
gcloud asset search-all-iam-policies \ --scope=projects/PROJECT_NAME \ --query='roles:roles/spanner.databaseRoleUser AND resource=//spanner.googleapis.com/projects/PROJECT_NAME/instances/INSTANCE_NAME/databases/DATABASE_NAME' --flatten=policy.bindings[].members[]
El resultado debería ser similar al siguiente:
ROLE MEMBERS EXPRESSION roles/spanner.databaseRoleUser serviceAccount:cs-fgac-sa-1@... roles/spanner.databaseRoleUser serviceAccount:cs-fgac-sa-2@... resource.type == "spanner…"
Ten en cuenta que falta una condición en el primer resultado, por lo que las entidades de seguridad de este enlace tienen acceso a todos los roles de la base de datos.
Eliminar un rol de base de datos
Si se elimina un rol de base de datos, se revoca automáticamente la pertenencia de otros roles al rol y la pertenencia del rol a otros roles.
Para eliminar un rol de base de datos, primero debes hacer lo siguiente:
- Revoca todos los privilegios de control de acceso pormenorizado del rol.
- Elimina todas las vinculaciones de políticas de gestión de identidades y accesos que hagan referencia a ese rol para que un rol de base de datos que se cree más adelante con el mismo nombre no herede esas vinculaciones.
Consola
Para eliminar un rol de base de datos, sigue estos pasos:
En la página Resumen de la base de datos, haz clic en Spanner Studio.
Para revocar los privilegios del rol, introduce una instrucción
REVOKE
.GoogleSQL
Para obtener información detallada sobre la sintaxis de la instrucción
REVOKE
, consulta Lenguaje de definición de datos de GoogleSQL. Para obtener información sobre los privilegios, consulta Privilegios de control de acceso pormenorizado.Por ejemplo, para revocar los permisos
SELECT
,INSERT
yUPDATE
en las tablasemployees
ycontractors
del rol de base de datoshr_manager
, introduce la siguiente instrucción:REVOKE SELECT, INSERT, UPDATE ON TABLE employees, contractors FROM ROLE hr_manager;
PostgreSQL
Para obtener información sobre la sintaxis de la instrucción
REVOKE
, consulta Lenguaje de definición de datos de PostgreSQL. Para obtener información sobre los privilegios, consulta Privilegios de control de acceso pormenorizado.Por ejemplo, para revocar los privilegios
SELECT
,INSERT
yUPDATE
en las tablasemployees
ycontractors
del rol de base de datoshr_manager
, introduce la siguiente instrucción:REVOKE SELECT, INSERT, UPDATE ON TABLE employees, contractors FROM hr_manager;
Puede usar una plantilla de DDL para la instrucción
REVOKE
. En el panel Explorador, ve al rol del que quieras revocar el privilegio. Haz clic en Ver acciones y selecciona el tipo de privilegio cuyo acceso quieras revocar para este rol. LaREVOKE
plantilla de la instrucción se rellena en una nueva pestaña del editor.Elimina las condiciones de gestión de identidades y accesos asociadas al rol.
En la lista de roles del panel de información, busca el rol Usuario de rol de base de datos de Cloud Spanner que tenga el título de la condición que te interesa junto a él y, a continuación, despliega el rol para ver las entidades de seguridad que tienen acceso a él.
En uno de los principales, haga clic en el icono Editar principal (lápiz).
En la página Editar acceso, haga clic en el icono Eliminar rol (papelera) situado junto al rol de usuario de la base de datos de Cloud Spanner.
Haz clic en Guardar.
Repite los tres pasos anteriores con el resto de los principales que se incluyan en la condición.
Para eliminar el rol, ve a la página Spanner Studio e introduce la siguiente instrucción:
DROP ROLE ROLE_NAME;
Haz clic en Enviar.
gcloud
Para revocar todos los privilegios de un rol y, a continuación, eliminarlo, usa el comando
gcloud spanner databases ddl update
de la siguiente manera:GoogleSQL
gcloud spanner databases ddl update DATABASE_NAME \ --instance=INSTANCE_NAME \ --ddl='REVOKE PERMISSIONS ON TABLE TABLE_NAME FROM ROLE ROLE_NAME; DROP ROLE ROLE_NAME;'
PostgreSQL
gcloud spanner databases ddl update DATABASE_NAME \ --instance=INSTANCE_NAME \ --ddl='REVOKE PERMISSIONS ON TABLE TABLE_NAME FROM ROLE_NAME; DROP ROLE ROLE_NAME;'
Los valores válidos de
PERMISSIONS
sonSELECT
,INSERT
,UPDATE
yDELETE
.Para eliminar las condiciones de gestión de identidades y accesos relacionadas, usa el comando
gcloud spanner databases remove-iam-policy-binding
de la siguiente manera:gcloud spanner databases remove-iam-policy-binding DATABASE_NAME \ --instance=INSTANCE_NAME \ --role=ROLE_NAME \ --member=MEMBER_NAME \ --condition=CONDITION
MEMBER_NAME
es el identificador de la entidad principal. Debe tener el formatouser|group|serviceAccount:email
odomain:domain
.CONDITION
es una expresión de condición de gestión de identidades y accesos que especifica los roles que se deben conceder a la entidad principal.CONDITION
tiene el siguiente formato:--condition='expression=(resource.type == "spanner.googleapis.com/DatabaseRole" && (resource.name.endsWith("/ROLE1") || resource.name.endsWith("/ROLE2"))),title=TITLE,description=DESCRIPTION'
Toda la especificación de la condición debe coincidir exactamente con la especificación de la condición que se usó en el comando que concedió el permiso, incluidos el título y la descripción.
Bibliotecas de cliente
Ambos ejemplos de código crean y eliminan un rol de base de datos.
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
Más información
- Información sobre el control de acceso granular
- Control de acceso pormenorizado para flujos de cambios
- Privilegios de control de acceso pormenorizado
- Referencia de DDL de GoogleSQL
- Hacer actualizaciones de esquemas