ClickHouse/docs/es/sql-reference/statements/grant.md
Ivan Blinkov cd14f9ebcb
SQL reference refactoring (#10857)
* split up select.md

* array-join.md basic refactoring

* distinct.md basic refactoring

* format.md basic refactoring

* from.md basic refactoring

* group-by.md basic refactoring

* having.md basic refactoring

* additional index.md refactoring

* into-outfile.md basic refactoring

* join.md basic refactoring

* limit.md basic refactoring

* limit-by.md basic refactoring

* order-by.md basic refactoring

* prewhere.md basic refactoring

* adjust operators/index.md links

* adjust sample.md links

* adjust more links

* adjust operatots links

* fix some links

* adjust aggregate function article titles

* basic refactor of remaining select clauses

* absolute paths in make_links.sh

* run make_links.sh

* remove old select.md locations

* translate docs/es

* translate docs/fr

* translate docs/fa

* remove old operators.md location

* change operators.md links

* adjust links in docs/es

* adjust links in docs/es

* minor texts adjustments

* wip

* update machine translations to use new links

* fix changelog

* es build fixes

* get rid of some select.md links

* temporary adjust ru links

* temporary adjust more ru links

* improve curly brace handling

* adjust ru as well

* fa build fix

* ru link fixes

* zh link fixes

* temporary disable part of anchor checks
2020-05-15 07:34:54 +03:00

21 KiB

machine_translated machine_translated_rev toc_priority toc_title
true 72537a2d52 39 GRANT

GRANT

  • Conceder privilegio a las cuentas o roles de usuario de ClickHouse.
  • Asigna roles a cuentas de usuario u otros roles.

Para revocar privilegios, utilice el REVOKE instrucción. También puede enumerar los privilegios concedidos por el SHOW GRANTS instrucción.

Concesión de sintaxis de privilegios

GRANT [ON CLUSTER cluster_name] privilege[(column_name [,...])] [,...] ON {db.table|db.*|*.*|table|*} TO {user | role | CURRENT_USER} [,...] [WITH GRANT OPTION]
  • privilege — Type of privilege.
  • role — ClickHouse user role.
  • user — ClickHouse user account.

El WITH GRANT OPTION subvenciones de cláusula user o role con permiso para realizar el GRANT consulta. Los usuarios pueden otorgar privilegios del mismo alcance que tienen y menos.

Concesión de sintaxis de roles

GRANT [ON CLUSTER cluster_name] role [,...] TO {user | another_role | CURRENT_USER} [,...] [WITH ADMIN OPTION]
  • role — ClickHouse user role.
  • user — ClickHouse user account.

El WITH ADMIN OPTION conjuntos de cláusulas ADMIN OPTION privilegio para user o role.

Uso

Utilizar GRANT su cuenta debe tener el GRANT OPTION privilegio. Puede otorgar privilegios solo dentro del ámbito de los privilegios de su cuenta.

Por ejemplo, el administrador ha otorgado privilegios a john cuenta por la consulta:

GRANT SELECT(x,y) ON db.table TO john WITH GRANT OPTION

Significa que john tiene el permiso para realizar:

  • SELECT x,y FROM db.table.
  • SELECT x FROM db.table.
  • SELECT y FROM db.table.

john no puede realizar SELECT z FROM db.table. El SELECT * FROM db.table también no está disponible. Al procesar esta consulta, ClickHouse no devuelve ningún dato, incluso x y y. La única excepción es si una tabla x y y columnas, en este caso ClickHouse devuelve todos los datos.

También john tiene el GRANT OPTION privilegios, por lo que puede otorgar a otros usuarios con privilegios del mismo o del menor alcance.

Especificación de privilegios que puede utilizar asterisco (*) en lugar de una tabla o un nombre de base de datos. Por ejemplo, el GRANT SELECT ON db.* TO john consulta permite john para realizar el SELECT consulta sobre todas las tablas en db base. Además, puede omitir el nombre de la base de datos. En este caso, se otorgan privilegios para la base de datos actual, por ejemplo: GRANT SELECT ON * TO john otorga el privilegio en todas las tablas de la base de datos actual, GRANT SELECT ON mytable TO john otorga el privilegio sobre el mytable tabla en la base de datos actual.

Acceso a la system base de datos siempre está permitida (ya que esta base de datos se utiliza para procesar consultas).

Puede conceder varios privilegios a varias cuentas en una consulta. Consulta GRANT SELECT, INSERT ON *.* TO john, robin permite cuentas john y robin para realizar el INSERT y SELECT consultas sobre todas las tablas en todas las bases de datos en el servidor.

Privilegio

Privilegio es un permiso para realizar un tipo específico de consultas.

Los privilegios tienen una estructura jerárquica. Un conjunto de consultas permitidas depende del ámbito de privilegios.

Jerarquía de privilegios:

  • SELECT
  • INSERT
  • ALTER
    • ALTER TABLE
      • ALTER UPDATE
      • ALTER DELETE
      • ALTER COLUMN
        • ALTER ADD COLUMN
        • ALTER DROP COLUMN
        • ALTER MODIFY COLUMN
        • ALTER COMMENT COLUMN
        • ALTER CLEAR COLUMN
        • ALTER RENAME COLUMN
      • ALTER INDEX
        • ALTER ORDER BY
        • ALTER ADD INDEX
        • ALTER DROP INDEX
        • ALTER MATERIALIZE INDEX
        • ALTER CLEAR INDEX
      • ALTER CONSTRAINT
        • ALTER ADD CONSTRAINT
        • ALTER DROP CONSTRAINT
      • ALTER TTL
      • ALTER MATERIALIZE TTL
      • ALTER SETTINGS
      • ALTER MOVE PARTITION
      • ALTER FETCH PARTITION
      • ALTER FREEZE PARTITION
    • ALTER VIEW
      • ALTER VIEW REFRESH
      • ALTER VIEW MODIFY QUERY
  • CREATE
    • CREATE DATABASE
    • CREATE TABLE
    • CREATE VIEW
    • CREATE DICTIONARY
    • CREATE TEMPORARY TABLE
  • DROP
    • DROP DATABASE
    • DROP TABLE
    • DROP VIEW
    • DROP DICTIONARY
  • TRUNCATE
  • OPTIMIZE
  • SHOW
    • SHOW DATABASES
    • SHOW TABLES
    • SHOW COLUMNS
    • SHOW DICTIONARIES
  • KILL QUERY
  • ACCESS MANAGEMENT
    • CREATE USER
    • ALTER USER
    • DROP USER
    • CREATE ROLE
    • ALTER ROLE
    • DROP ROLE
    • CREATE ROW POLICY
    • ALTER ROW POLICY
    • DROP ROW POLICY
    • CREATE QUOTA
    • ALTER QUOTA
    • DROP QUOTA
    • CREATE SETTINGS PROFILE
    • ALTER SETTINGS PROFILE
    • DROP SETTINGS PROFILE
    • SHOW ACCESS
      • SHOW_USERS
      • SHOW_ROLES
      • SHOW_ROW_POLICIES
      • SHOW_QUOTAS
      • SHOW_SETTINGS_PROFILES
    • ROLE ADMIN
  • SYSTEM
    • SYSTEM SHUTDOWN
    • SYSTEM DROP CACHE
      • SYSTEM DROP DNS CACHE
      • SYSTEM DROP MARK CACHE
      • SYSTEM DROP UNCOMPRESSED CACHE
    • SYSTEM RELOAD
      • SYSTEM RELOAD CONFIG
      • SYSTEM RELOAD DICTIONARY
      • SYSTEM RELOAD EMBEDDED DICTIONARIES
    • SYSTEM MERGES
    • SYSTEM TTL MERGES
    • SYSTEM FETCHES
    • SYSTEM MOVES
    • SYSTEM SENDS
      • SYSTEM DISTRIBUTED SENDS
      • SYSTEM REPLICATED SENDS
    • SYSTEM REPLICATION QUEUES
    • SYSTEM SYNC REPLICA
    • SYSTEM RESTART REPLICA
    • SYSTEM FLUSH
      • SYSTEM FLUSH DISTRIBUTED
      • SYSTEM FLUSH LOGS
  • INTROSPECTION
    • addressToLine
    • addressToSymbol
    • demangle
  • SOURCES
    • FILE
    • URL
    • REMOTE
    • YSQL
    • ODBC
    • JDBC
    • HDFS
    • S3
  • dictGet

Ejemplos de cómo se trata esta jerarquía:

  • El ALTER privilegio incluye todos los demás ALTER* privilegio.
  • ALTER CONSTRAINT incluir ALTER ADD CONSTRAINT y ALTER DROP CONSTRAINT privilegio.

Los privilegios se aplican a diferentes niveles. Conocer un nivel sugiere sintaxis disponible para privilegios.

Niveles (de menor a mayor):

  • COLUMN — Privilege can be granted for column, table, database, or globally.
  • TABLE — Privilege can be granted for table, database, or globally.
  • VIEW — Privilege can be granted for view, database, or globally.
  • DICTIONARY — Privilege can be granted for dictionary, database, or globally.
  • DATABASE — Privilege can be granted for database or globally.
  • GLOBAL — Privilege can be granted only globally.
  • GROUP — Groups privileges of different levels. When GROUP-level privilegio se concede, sólo los privilegios del grupo se conceden que corresponden a la sintaxis utilizada.

Ejemplos de sintaxis permitida:

  • GRANT SELECT(x) ON db.table TO user
  • GRANT SELECT ON db.* TO user

Ejemplos de sintaxis no permitida:

  • GRANT CREATE USER(x) ON db.table TO user
  • GRANT CREATE USER ON db.* TO user

El privilegio especial ALL otorga todos los privilegios a una cuenta de usuario o un rol.

De forma predeterminada, una cuenta de usuario o un rol no tiene privilegios.

Si un usuario o rol no tiene privilegios, se muestra como NONE privilegio.

Algunas consultas por su implementación requieren un conjunto de privilegios. Por ejemplo, para realizar el RENAME consulta necesita los siguientes privilegios: SELECT, CREATE TABLE, INSERT y DROP TABLE.

SELECT

Permite realizar SELECT consulta.

Nivel de privilegio: COLUMN.

Descripci

El usuario concedido con este privilegio puede realizar SELECT consultas sobre una lista especificada de columnas en la tabla y la base de datos especificadas. Si el usuario incluye otras columnas, entonces se especifica una consulta no devuelve datos.

Considere el siguiente privilegio:

GRANT SELECT(x,y) ON db.table TO john

Este privilegio permite john realizar cualquier SELECT consulta que involucra datos de la x y/o y columnas en db.table. Por ejemplo, SELECT x FROM db.table. john no puede realizar SELECT z FROM db.table. El SELECT * FROM db.table también no está disponible. Al procesar esta consulta, ClickHouse no devuelve ningún dato, incluso x y y. La única excepción es si una tabla x y y columnas, en este caso ClickHouse devuelve todos los datos.

INSERT

Permite realizar INSERT consulta.

Nivel de privilegio: COLUMN.

Descripci

El usuario concedido con este privilegio puede realizar INSERT consultas sobre una lista especificada de columnas en la tabla y la base de datos especificadas. Si el usuario incluye otras columnas, entonces se especifica una consulta no inserta ningún dato.

Ejemplo

GRANT INSERT(x,y) ON db.table TO john

El privilegio concedido permite john para insertar datos en el x y/o y columnas en db.table.

ALTER

Permite realizar ALTER consultas correspondientes a la siguiente jerarquía de privilegios:

  • ALTER. Nivel: COLUMN.
    • ALTER TABLE. Nivel: GROUP
      • ALTER UPDATE. Nivel: COLUMN. Apodo: UPDATE
      • ALTER DELETE. Nivel: COLUMN. Apodo: DELETE
      • ALTER COLUMN. Nivel: GROUP
        • ALTER ADD COLUMN. Nivel: COLUMN. Apodo: ADD COLUMN
        • ALTER DROP COLUMN. Nivel: COLUMN. Apodo: DROP COLUMN
        • ALTER MODIFY COLUMN. Nivel: COLUMN. Apodo: MODIFY COLUMN
        • ALTER COMMENT COLUMN. Nivel: COLUMN. Apodo: COMMENT COLUMN
        • ALTER CLEAR COLUMN. Nivel: COLUMN. Apodo: CLEAR COLUMN
        • ALTER RENAME COLUMN. Nivel: COLUMN. Apodo: RENAME COLUMN
      • ALTER INDEX. Nivel: GROUP. Apodo: INDEX
        • ALTER ORDER BY. Nivel: TABLE. Apodo: ALTER MODIFY ORDER BY, MODIFY ORDER BY
        • ALTER ADD INDEX. Nivel: TABLE. Apodo: ADD INDEX
        • ALTER DROP INDEX. Nivel: TABLE. Apodo: DROP INDEX
        • ALTER MATERIALIZE INDEX. Nivel: TABLE. Apodo: MATERIALIZE INDEX
        • ALTER CLEAR INDEX. Nivel: TABLE. Apodo: CLEAR INDEX
      • ALTER CONSTRAINT. Nivel: GROUP. Apodo: CONSTRAINT
        • ALTER ADD CONSTRAINT. Nivel: TABLE. Apodo: ADD CONSTRAINT
        • ALTER DROP CONSTRAINT. Nivel: TABLE. Apodo: DROP CONSTRAINT
      • ALTER TTL. Nivel: TABLE. Apodo: ALTER MODIFY TTL, MODIFY TTL
      • ALTER MATERIALIZE TTL. Nivel: TABLE. Apodo: MATERIALIZE TTL
      • ALTER SETTINGS. Nivel: TABLE. Apodo: ALTER SETTING, ALTER MODIFY SETTING, MODIFY SETTING
      • ALTER MOVE PARTITION. Nivel: TABLE. Apodo: ALTER MOVE PART, MOVE PARTITION, MOVE PART
      • ALTER FETCH PARTITION. Nivel: TABLE. Apodo: FETCH PARTITION
      • ALTER FREEZE PARTITION. Nivel: TABLE. Apodo: FREEZE PARTITION
    • ALTER VIEW Nivel: GROUP
      • ALTER VIEW REFRESH. Nivel: VIEW. Apodo: ALTER LIVE VIEW REFRESH, REFRESH VIEW
      • ALTER VIEW MODIFY QUERY. Nivel: VIEW. Apodo: ALTER TABLE MODIFY QUERY

Ejemplos de cómo se trata esta jerarquía:

  • El ALTER privilegio incluye todos los demás ALTER* privilegio.
  • ALTER CONSTRAINT incluir ALTER ADD CONSTRAINT y ALTER DROP CONSTRAINT privilegio.

Nota

  • El MODIFY SETTING privilege permite modificar la configuración del motor de tablas. In no afecta la configuración o los parámetros de configuración del servidor.
  • El ATTACH operación necesita el CREATE privilegio.
  • El DETACH operación necesita el DROP privilegio.
  • Para detener la mutación por el KILL MUTATION consulta, necesita tener un privilegio para iniciar esta mutación. Por ejemplo, si desea detener el ALTER UPDATE consulta, necesita el ALTER UPDATE, ALTER TABLE, o ALTER privilegio.

CREATE

Permite realizar CREATE y ATTACH Consultas DDL correspondientes a la siguiente jerarquía de privilegios:

  • CREATE. Nivel: GROUP
    • CREATE DATABASE. Nivel: DATABASE
    • CREATE TABLE. Nivel: TABLE
    • CREATE VIEW. Nivel: VIEW
    • CREATE DICTIONARY. Nivel: DICTIONARY
    • CREATE TEMPORARY TABLE. Nivel: GLOBAL

Nota

  • Para eliminar la tabla creada, un usuario necesita DROP.

DROP

Permite realizar DROP y DETACH consultas correspondientes a la siguiente jerarquía de privilegios:

  • DROP. Nivel:
    • DROP DATABASE. Nivel: DATABASE
    • DROP TABLE. Nivel: TABLE
    • DROP VIEW. Nivel: VIEW
    • DROP DICTIONARY. Nivel: DICTIONARY

TRUNCATE

Permite realizar TRUNCATE consulta.

Nivel de privilegio: TABLE.

OPTIMIZE

Permite realizar el OPTIMIZE TABLE consulta.

Nivel de privilegio: TABLE.

SHOW

Permite realizar SHOW, DESCRIBE, USE, y EXISTS consultas, correspondientes a la siguiente jerarquía de privilegios:

  • SHOW. Nivel: GROUP
    • SHOW DATABASES. Nivel: DATABASE. Permite ejecutar SHOW DATABASES, SHOW CREATE DATABASE, USE <database> consulta.
    • SHOW TABLES. Nivel: TABLE. Permite ejecutar SHOW TABLES, EXISTS <table>, CHECK <table> consulta.
    • SHOW COLUMNS. Nivel: COLUMN. Permite ejecutar SHOW CREATE TABLE, DESCRIBE consulta.
    • SHOW DICTIONARIES. Nivel: DICTIONARY. Permite ejecutar SHOW DICTIONARIES, SHOW CREATE DICTIONARY, EXISTS <dictionary> consulta.

Nota

Un usuario tiene el SHOW privilegio si tiene algún otro privilegio relativo a la tabla, diccionario o base de datos especificados.

KILL QUERY

Permite realizar el KILL consultas correspondientes a la siguiente jerarquía de privilegios:

Nivel de privilegio: GLOBAL.

Nota

KILL QUERY privilege permite a un usuario matar consultas de otros usuarios.

ACCESS MANAGEMENT

Permite a un usuario realizar consultas que administran usuarios, roles y directivas de fila.

  • ACCESS MANAGEMENT. Nivel: GROUP
    • CREATE USER. Nivel: GLOBAL
    • ALTER USER. Nivel: GLOBAL
    • DROP USER. Nivel: GLOBAL
    • CREATE ROLE. Nivel: GLOBAL
    • ALTER ROLE. Nivel: GLOBAL
    • DROP ROLE. Nivel: GLOBAL
    • ROLE ADMIN. Nivel: GLOBAL
    • CREATE ROW POLICY. Nivel: GLOBAL. Apodo: CREATE POLICY
    • ALTER ROW POLICY. Nivel: GLOBAL. Apodo: ALTER POLICY
    • DROP ROW POLICY. Nivel: GLOBAL. Apodo: DROP POLICY
    • CREATE QUOTA. Nivel: GLOBAL
    • ALTER QUOTA. Nivel: GLOBAL
    • DROP QUOTA. Nivel: GLOBAL
    • CREATE SETTINGS PROFILE. Nivel: GLOBAL. Apodo: CREATE PROFILE
    • ALTER SETTINGS PROFILE. Nivel: GLOBAL. Apodo: ALTER PROFILE
    • DROP SETTINGS PROFILE. Nivel: GLOBAL. Apodo: DROP PROFILE
    • SHOW ACCESS. Nivel: GROUP
      • SHOW_USERS. Nivel: GLOBAL. Apodo: SHOW CREATE USER
      • SHOW_ROLES. Nivel: GLOBAL. Apodo: SHOW CREATE ROLE
      • SHOW_ROW_POLICIES. Nivel: GLOBAL. Apodo: SHOW POLICIES, SHOW CREATE ROW POLICY, SHOW CREATE POLICY
      • SHOW_QUOTAS. Nivel: GLOBAL. Apodo: SHOW CREATE QUOTA
      • SHOW_SETTINGS_PROFILES. Nivel: GLOBAL. Apodo: SHOW PROFILES, SHOW CREATE SETTINGS PROFILE, SHOW CREATE PROFILE

El ROLE ADMIN privilege permite a un usuario otorgar y revocar cualquier función, incluidas aquellas que no se otorgan al usuario con la opción de administrador.

SYSTEM

Permite a un usuario realizar el SYSTEM consultas correspondientes a la siguiente jerarquía de privilegios.

  • SYSTEM. Nivel: GROUP
    • SYSTEM SHUTDOWN. Nivel: GLOBAL. Apodo: SYSTEM KILL, SHUTDOWN
    • SYSTEM DROP CACHE. Apodo: DROP CACHE
      • SYSTEM DROP DNS CACHE. Nivel: GLOBAL. Apodo: SYSTEM DROP DNS, DROP DNS CACHE, DROP DNS
      • SYSTEM DROP MARK CACHE. Nivel: GLOBAL. Apodo: SYSTEM DROP MARK, DROP MARK CACHE, DROP MARKS
      • SYSTEM DROP UNCOMPRESSED CACHE. Nivel: GLOBAL. Apodo: SYSTEM DROP UNCOMPRESSED, DROP UNCOMPRESSED CACHE, DROP UNCOMPRESSED
    • SYSTEM RELOAD. Nivel: GROUP
      • SYSTEM RELOAD CONFIG. Nivel: GLOBAL. Apodo: RELOAD CONFIG
      • SYSTEM RELOAD DICTIONARY. Nivel: GLOBAL. Apodo: SYSTEM RELOAD DICTIONARIES, RELOAD DICTIONARY, RELOAD DICTIONARIES
      • SYSTEM RELOAD EMBEDDED DICTIONARIES. Nivel: GLOBAL. Aliases: RELOAD EMBEDDED DICTIONARIES
    • SYSTEM MERGES. Nivel: TABLE. Apodo: SYSTEM STOP MERGES, SYSTEM START MERGES, STOP MERGES, START MERGES
    • SYSTEM TTL MERGES. Nivel: TABLE. Apodo: SYSTEM STOP TTL MERGES, SYSTEM START TTL MERGES, STOP TTL MERGES, START TTL MERGES
    • SYSTEM FETCHES. Nivel: TABLE. Apodo: SYSTEM STOP FETCHES, SYSTEM START FETCHES, STOP FETCHES, START FETCHES
    • SYSTEM MOVES. Nivel: TABLE. Apodo: SYSTEM STOP MOVES, SYSTEM START MOVES, STOP MOVES, START MOVES
    • SYSTEM SENDS. Nivel: GROUP. Apodo: SYSTEM STOP SENDS, SYSTEM START SENDS, STOP SENDS, START SENDS
      • SYSTEM DISTRIBUTED SENDS. Nivel: TABLE. Apodo: SYSTEM STOP DISTRIBUTED SENDS, SYSTEM START DISTRIBUTED SENDS, STOP DISTRIBUTED SENDS, START DISTRIBUTED SENDS
      • SYSTEM REPLICATED SENDS. Nivel: TABLE. Apodo: SYSTEM STOP REPLICATED SENDS, SYSTEM START REPLICATED SENDS, STOP REPLICATED SENDS, START REPLICATED SENDS
    • SYSTEM REPLICATION QUEUES. Nivel: TABLE. Apodo: SYSTEM STOP REPLICATION QUEUES, SYSTEM START REPLICATION QUEUES, STOP REPLICATION QUEUES, START REPLICATION QUEUES
    • SYSTEM SYNC REPLICA. Nivel: TABLE. Apodo: SYNC REPLICA
    • SYSTEM RESTART REPLICA. Nivel: TABLE. Apodo: RESTART REPLICA
    • SYSTEM FLUSH. Nivel: GROUP
      • SYSTEM FLUSH DISTRIBUTED. Nivel: TABLE. Apodo: FLUSH DISTRIBUTED
      • SYSTEM FLUSH LOGS. Nivel: GLOBAL. Apodo: FLUSH LOGS

El SYSTEM RELOAD EMBEDDED DICTIONARIES privilegios otorgados implícitamente por el SYSTEM RELOAD DICTIONARY ON *.* privilegio.

INTROSPECTION

Permite usar introspección función.

  • INTROSPECTION. Nivel: GROUP. Apodo: INTROSPECTION FUNCTIONS
    • addressToLine. Nivel: GLOBAL
    • addressToSymbol. Nivel: GLOBAL
    • demangle. Nivel: GLOBAL

SOURCES

Permite utilizar fuentes de datos externas. Se aplica a motores de mesa y funciones de la tabla.

  • SOURCES. Nivel: GROUP
    • FILE. Nivel: GLOBAL
    • URL. Nivel: GLOBAL
    • REMOTE. Nivel: GLOBAL
    • YSQL. Nivel: GLOBAL
    • ODBC. Nivel: GLOBAL
    • JDBC. Nivel: GLOBAL
    • HDFS. Nivel: GLOBAL
    • S3. Nivel: GLOBAL

El SOURCES privilege permite el uso de todas las fuentes. También puede otorgar un privilegio para cada fuente individualmente. Para usar fuentes, necesita privilegios adicionales.

Ejemplos:

dictGet

  • dictGet. Apodo: dictHas, dictGetHierarchy, dictIsIn

Permite a un usuario ejecutar dictGet, dictHas, dictGetHierarchy, DictIsIn función.

Nivel de privilegio: DICTIONARY.

Ejemplos

  • GRANT dictGet ON mydb.mydictionary TO john
  • GRANT dictGet ON mydictionary TO john

ALL

Otorga todos los privilegios de la entidad regulada a una cuenta de usuario o un rol.

NONE

No otorga ningún privilegio.

ADMIN OPTION

El ADMIN OPTION privilege permite a un usuario otorgar su rol a otro usuario.

Artículo Original