{"id":81884,"date":"2020-05-17T13:42:18","date_gmt":"2020-05-17T11:42:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity"},"modified":"2020-05-17T13:42:18","modified_gmt":"2020-05-17T11:42:18","slug":"bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","title":{"rendered":"Seguridad y bases de datos: qu\u00e9 tener en cuenta al elegir medios de protecci\u00f3n.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1><img decoding=\"async\" alt=\"Seguridad y bases de datos: qu\u00e9 tener en cuenta al elegir medios de protecci\u00f3n.\" src=\"\/wp-content\/uploads\/2020\/05\/ac49253838e36336af127d71394139d8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/h1>\n<p>\nMe llamo Denis Rozhkov, soy el l\u00edder de desarrollo de software en la empresa 'Gazinformservice', en el equipo de producto <noindex><a rel=\"nofollow\" href=\"https:\/\/www.gaz-is.ru\/produkty\/inform-sistemy\/subd-jatoba.html\">Jatoba<\/a><\/noindex>. La legislaci\u00f3n y las normas corporativas imponen ciertos requisitos sobre la seguridad del almacenamiento de datos. Nadie quiere que terceros tengan acceso a informaci\u00f3n confidencial, por lo que para cualquier proyecto son importantes las siguientes cuestiones: identificaci\u00f3n y autenticaci\u00f3n, gesti\u00f3n de accesos a los datos, aseguramiento de la integridad de la informaci\u00f3n en el sistema, registro de eventos de seguridad. Por eso quiero hablar sobre algunos aspectos interesantes relacionados con la seguridad de las bases de datos. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEste art\u00edculo se ha preparado a partir de una presentaci\u00f3n en <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup,<\/a><\/noindex> organizado <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Soluciones en la Nube de Mail.ru<\/a><\/noindex>. Si no quieres leer, puedes ver:<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"n-54j9FHaMU\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/n-54j9FHaMU\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nEl art\u00edculo constar\u00e1 de tres partes:<\/p>\n<ul>\n<li>C\u00f3mo proteger las conexiones.<\/li>\n<li>Qu\u00e9 es la auditor\u00eda de acciones y c\u00f3mo registrar lo que sucede en el lado de la base de datos y las conexiones a ella.<\/li>\n<li>C\u00f3mo proteger los datos en la propia base de datos y qu\u00e9 tecnolog\u00edas existen para ello.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Seguridad y bases de datos: qu\u00e9 tener en cuenta al elegir medios de protecci\u00f3n.\" src=\"\/wp-content\/uploads\/2020\/05\/fbdca7f4a925b9ceb78de06c6e245b23.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Tres componentes de la seguridad en bases de datos: protecci\u00f3n de conexiones, auditor\u00eda de acciones y protecci\u00f3n de datos<\/i><\/p>\n<h2>Protecci\u00f3n de conexiones<\/h2>\n<p>\nSe puede conectar a la base de datos tanto directamente como indirectamente a trav\u00e9s de aplicaciones web. Por lo general, el usuario del lado del negocio, es decir, la persona que trabaja con la base de datos, no interact\u00faa con ella directamente.<\/p>\n<p>Antes de hablar sobre la protecci\u00f3n de las conexiones, es necesario responder a preguntas importantes que determinar\u00e1n c\u00f3mo se organizar\u00e1n las medidas de seguridad:<\/p>\n<ul>\n<li>\u00bfes un usuario de negocio equivalente a un usuario de base de datos?<\/li>\n<li>\u00bfse garantiza el acceso a los datos de la base de datos solo a trav\u00e9s de una API que controlas, o hay acceso directo a las tablas?<\/li>\n<li>\u00bfse ha aislado la base de datos en un segmento protegido, y qui\u00e9n interact\u00faa con \u00e9l y c\u00f3mo?<\/li>\n<li>\u00bfse utiliza pooling\/proxy y capas intermedias que pueden alterar la informaci\u00f3n sobre c\u00f3mo se establece la conexi\u00f3n y qui\u00e9n utiliza la base de datos?<\/li>\n<\/ul>\n<p>\nAhora veamos qu\u00e9 herramientas se pueden aplicar para proteger las conexiones:<\/p>\n<ol>\n<li>Utiliza soluciones de tipo firewall de base de datos. Un nivel adicional de protecci\u00f3n, como m\u00ednimo, aumentar\u00e1 la transparencia de lo que ocurre en la base de datos; en el mejor de los casos, podr\u00e1s proporcionar protecci\u00f3n adicional a los datos.<\/li>\n<li>Utilice pol\u00edticas de contrase\u00f1as. Su aplicaci\u00f3n depende de c\u00f3mo est\u00e9 estructurada su arquitectura. En cualquier caso, una sola contrase\u00f1a en el archivo de configuraci\u00f3n de la aplicaci\u00f3n web que se conecta a la base de datos no es suficiente para protegerse. Hay varias herramientas de bases de datos que permiten controlar que el usuario y la contrase\u00f1a requieran actualizaci\u00f3n.\n<p>Puede leer m\u00e1s sobre las funciones de evaluaci\u00f3n de usuarios <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.cloud.oracle.com\/en-us\/iaas\/data-safe\/doc\/user-assessment-reports.html\">aqu\u00ed<\/a><\/noindex>, tambi\u00e9n puede informarse sobre MS SQL Vulnerability Assessment <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/security\/sql-vulnerability-assessment?view=sql-server-ver15\">aqu\u00ed<\/a><\/noindex>.\u00a0<\/li>\n<li>Enriquezca el contexto de la sesi\u00f3n con la informaci\u00f3n necesaria. Si la sesi\u00f3n es opaca, no entiende qui\u00e9n est\u00e1 operando en la base de datos, puede complementar la informaci\u00f3n sobre qui\u00e9n, qu\u00e9 y por qu\u00e9 se est\u00e1 haciendo algo dentro de la operaci\u00f3n que se ejecuta. Esta informaci\u00f3n se puede ver en la auditor\u00eda.<\/li>\n<li>Configure SSL si no tiene una separaci\u00f3n de red de la base de datos desde los usuarios finales, no est\u00e1 en una VLAN separada. En tales casos, es esencial proteger el canal entre el consumidor y la propia base de datos. Herramientas de protecci\u00f3n tambi\u00e9n existen entre las de c\u00f3digo abierto.<\/li>\n<\/ol>\n<p><\/p>\n<h3>\u00bfC\u00f3mo afectar\u00e1 esto el rendimiento de la base de datos?<\/h3>\n<p>\nVeamos el ejemplo de PostgreSQL, c\u00f3mo SSL afecta la carga de la CPU, el aumento de tiempos y la disminuci\u00f3n de TPS; \u00bfno consumir\u00e1 demasiados recursos si se activa?<\/p>\n<p>Cargamos PostgreSQL usando pgbench; es un programa simple para ejecutar pruebas de rendimiento. Ejecuta repetidamente una secuencia de comandos, posiblemente en sesiones paralelas de bases de datos, y luego calcula la velocidad media de las transacciones.<\/p>\n<p><strong>Prueba 1 sin SSL y con SSL<\/strong> \u2014 la conexi\u00f3n se establece con cada transacci\u00f3n:<\/p>\n<pre><code class=\"plaintext\">pgbench.exe --connect -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres sslmode=require \nsslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key\"<\/code><\/pre>\n<p>\n<strong>vs<\/strong><\/p>\n<pre><code class=\"plaintext\">pgbench.exe --connect -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres\"<\/code><\/pre>\n<p>\n<strong>Prueba 2 sin SSL y con SSL<\/strong> \u2014 todas las transacciones se ejecutan en una sola conexi\u00f3n:<\/p>\n<pre><code class=\"plaintext\">pgbench.exe -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres sslmode=require\nsslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key\"<\/code><\/pre>\n<p>\n<strong>vs<\/strong><\/p>\n<pre><code class=\"plaintext\">pgbench.exe -c 10 -t 5000 \"host=192.168.220.129 dbname=taskdb user=postgres\"<\/code><\/pre>\n<p>\n<strong>Otras configuraciones<\/strong>:<\/p>\n<pre><code class=\"plaintext\">factor de escalado: 1\nmodo de consulta: simple\nn\u00famero de clientes: 10\nn\u00famero de hilos: 1\nn\u00famero de transacciones por cliente: 5000\nn\u00famero de transacciones realmente procesadas: 50000\/50000<\/code><\/pre>\n<p>\n<strong>No voy a escribir mucho texto explicativo aqu\u00ed, solo compartir\u00e9 los resultados obtenidos. Las pruebas se realizaron en 3 m\u00e1quinas f\u00edsicas (12 CPU, 384GB RAM, 15k SAS DISK, 10GBit\/s Net), los brokers y zookeeper se desplegaron en lxc.<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>SIN SSL<\/strong><br \/>\n<strong>SSL<\/strong><\/p>\n<p><strong>La conexi\u00f3n se establece en cada transacci\u00f3n<\/strong><\/p>\n<p>latencia promedio<br \/>\n171.915 ms<br \/>\n187.695 ms<\/p>\n<p>tps incluyendo el establecimiento de conexiones<br \/>\n58.168112<br \/>\n53.278062<\/p>\n<p>tps excluyendo el establecimiento de conexiones<br \/>\n64.084546<br \/>\n58.725846<\/p>\n<p>CPU<br \/>\n24%<br \/>\n28%<\/p>\n<p><strong>Todas las transacciones se realizan en una sola conexi\u00f3n<\/strong><\/p>\n<p>latencia promedio<br \/>\n6.722 ms<br \/>\n6.342 ms<\/p>\n<p>tps incluyendo el establecimiento de conexiones<br \/>\n1587.657278<br \/>\n1576.792883<\/p>\n<p>tps excluyendo el establecimiento de conexiones<br \/>\n1588.380574<br \/>\n1577.694766<\/p>\n<p>CPU<br \/>\n17%<br \/>\n21%<\/p>\n<p>\nCon cargas peque\u00f1as, el impacto de SSL es comparable al margen de error de medici\u00f3n. Si el volumen de datos transmitidos es muy grande, la situaci\u00f3n puede ser diferente. Si establecemos una conexi\u00f3n por cada transacci\u00f3n (lo cual es raro, generalmente la conexi\u00f3n se comparte entre usuarios), se generan muchas conexiones\/desconexiones, y el impacto puede ser un poco mayor. Es decir, hay riesgos de disminuci\u00f3n del rendimiento, sin embargo, la diferencia no es lo suficientemente grande como para no utilizar la protecci\u00f3n.<\/p>\n<p>Tenga en cuenta que existe una gran diferencia al comparar los modos de operaci\u00f3n: si trabaja dentro de una sesi\u00f3n o de diferentes. Esto es comprensible: se requieren recursos para crear cada conexi\u00f3n.<\/p>\n<p>Tuvimos un caso en el que conectamos Zabbix en modo de confianza, es decir, no verificamos md5, no hab\u00eda necesidad de autenticaci\u00f3n. Luego, el cliente pidi\u00f3 activar el modo de autenticaci\u00f3n md5. Esto ejerci\u00f3 una gran carga en la CPU y el rendimiento cay\u00f3. Comenzamos a buscar formas de optimizaci\u00f3n. Una de las soluciones posibles al problema es implementar una restricci\u00f3n de red, crear VLAN separadas para la base de datos, agregar configuraciones para identificar qui\u00e9n se conecta y de d\u00f3nde, y eliminar la autenticaci\u00f3n. Tambi\u00e9n se pueden optimizar las configuraciones de autenticaci\u00f3n para disminuir los costos al habilitar la autenticaci\u00f3n, pero en general, la aplicaci\u00f3n de diferentes m\u00e9todos de autenticaci\u00f3n afecta el rendimiento y se deben considerar estos factores al dise\u00f1ar la capacidad de computaci\u00f3n de los servidores (hardware) para la base de datos.<\/p>\n<p>Conclusi\u00f3n: en una serie de soluciones, incluso peque\u00f1os matices en la autenticaci\u00f3n pueden tener un gran impacto en el proyecto, y es problem\u00e1tico cuando esto solo se entiende al implementarse en producci\u00f3n.<\/p>\n<h2>Auditor\u00eda de acciones<\/h2>\n<p>\nLa auditor\u00eda puede no solo ser de la base de datos. La auditor\u00eda es la obtenci\u00f3n de informaci\u00f3n sobre lo que sucede en diferentes segmentos. Esto puede incluir un firewall de base de datos y el sistema operativo sobre el cual se construye la base de datos.<\/p>\n<p>En bases de datos comerciales de nivel Enterprise, la auditor\u00eda est\u00e1 bien, en open source \u2014 no siempre. Esto es lo que hay en PostgreSQL:<\/p>\n<ul>\n<li>logging predeterminado: registro incorporado;<\/li>\n<li>extensiones: pgaudit \u2014 si le falta el registro predeterminado, se pueden utilizar configuraciones separadas que abordan algunas tareas.<\/li>\n<\/ul>\n<p>\n<b>Complemento a la presentaci\u00f3n en video:<\/b><\/p>\n<p>La \u00abregistraci\u00f3n b\u00e1sica de operadores puede ser asegurada con una herramienta est\u00e1ndar de registro con log_statement = all.<\/p>\n<p>Esto es aceptable para la monitorizaci\u00f3n y otros tipos de uso, pero no proporciona el nivel de detalle normalmente requerido para auditor\u00edas.<\/p>\n<p>No es suficiente tener una lista de todas las operaciones realizadas con la base de datos.<\/p>\n<p>Tambi\u00e9n debe haber la posibilidad de encontrar afirmaciones espec\u00edficas que sean de inter\u00e9s para el auditor.<\/p>\n<p>La herramienta est\u00e1ndar de registro muestra lo que el usuario solicit\u00f3, mientras que pgAudit se centra en los detalles de lo que ocurri\u00f3 cuando la base de datos ejecut\u00f3 la consulta.<\/p>\n<p>Por ejemplo, un auditor puede querer asegurarse de que una tabla espec\u00edfica fue creada en la ventana de mantenimiento documentada.<\/p>\n<p>Esto puede parecer una tarea sencilla para una auditor\u00eda b\u00e1sica y grep, pero \u00bfqu\u00e9 pasar\u00eda si se presenta algo como esto (intencionalmente confuso):<\/p>\n<p>DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>El registro est\u00e1ndar te dar\u00e1 esto:<\/p>\n<p>LOG: declaraci\u00f3n: DO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;<\/p>\n<p>Parece que encontrar la tabla de inter\u00e9s puede requerir cierto conocimiento del c\u00f3digo en los casos en que las tablas son creadas din\u00e1micamente.<\/p>\n<p>Esto no es ideal, ya que ser\u00eda preferible buscar simplemente por el nombre de la tabla.<\/p>\n<p>Aqu\u00ed es donde pgAudit ser\u00e1 \u00fatil.<\/p>\n<p>Para la misma entrada, generar\u00e1 esta salida en el registro:<\/p>\n<p>AUDIT: SESI\u00d3N,33,1,FUNCTION,DO,,,\u00abDO $$<br \/>\nBEGIN<br \/>\n EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';<br \/>\nEND $$;\"<br \/>\nAUDIT: SESI\u00d3N,33,2,DDL,CREE TABLA,TABLA,public.important_table,CREE TABLA important_table (id INT)<\/p>\n<p>No solo se registra el bloque DO, sino tambi\u00e9n el texto completo CREATE TABLE con el tipo de operador, el tipo de objeto y el nombre completo, lo que facilita la b\u00fasqueda.<\/p>\n<p>Al registrar operadores SELECT y DML, pgAudit se puede configurar para registrar una entrada separada para cada relaci\u00f3n a la que se hace referencia en la declaraci\u00f3n.<\/p>\n<p>No se requiere an\u00e1lisis sint\u00e1ctico para encontrar todos los operadores que tocan una tabla espec\u00edfica (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgaudit\/pgaudit\/blob\/master\/README.md\">*<\/a><\/noindex>)\u00bb.<\/p>\n<h3>\u00bfC\u00f3mo afectar\u00e1 esto el rendimiento de la base de datos?<\/h3>\n<p>\nRealicemos pruebas con la auditor\u00eda completa activada y veamos qu\u00e9 sucede con el rendimiento de PostgreSQL. Activaremos el registro m\u00e1ximo de la base de datos en todos los par\u00e1metros.<\/p>\n<p>En el archivo de configuraci\u00f3n cambiamos poco, de importancia, activamos el modo debug5 para obtener la m\u00e1xima informaci\u00f3n.<\/p>\n<p>postgresql.conf<\/p>\n<p>log_destination = 'stderr'<br \/>\nlogging_collector = on<br \/>\nlog_truncate_on_rotation = on<br \/>\nlog_rotation_age = 1d<br \/>\nlog_rotation_size = 10MB<br \/>\nlog_min_messages = <strong>debug5<\/strong><br \/>\nlog_min_error_statement = <strong>debug5<\/strong><br \/>\nlog_min_duration_statement = 0<br \/>\ndebug_print_parse = on<br \/>\ndebug_print_rewritten = on<br \/>\ndebug_print_plan = on<br \/>\ndebug_pretty_print = on<br \/>\nlog_checkpoints = on<br \/>\nlog_connections = on<br \/>\nlog_disconnections = on<br \/>\nlog_duration = on<br \/>\nlog_hostname = on<br \/>\nlog_lock_waits = on<br \/>\nlog_replication_commands = on<br \/>\nlog_temp_files = 0<br \/>\nlog_timezone = 'Europe\/Moscow'<\/p>\n<p>\nEn la base de datos PostgreSQL con par\u00e1metros de 1 CPU, 2.8 GHz, 2 GB de RAM, 40 GB de HDD realizamos tres pruebas de carga, utilizando los comandos:<\/p>\n<pre><code class=\"plaintext\">$ pgbench -p 3389 -U postgres -i -s 150 benchmark\n$ pgbench -p 3389 -U postgres -c 50 -j 2 -P 60 -T 600 benchmark\n$ pgbench -p 3389 -U postgres -c 150 -j 2 -P 60 -T 600 benchmark<\/code><\/pre>\n<p>\n<strong>Resultados de las pruebas:<\/strong><\/p>\n<p><strong>Sin registro<\/strong><br \/>\n<strong>Con registro<\/strong><\/p>\n<p>Tiempo total de llenado de la base de datos<br \/>\n43.74 seg<br \/>\n53.23 seg<\/p>\n<p>RAM<br \/>\n24%<br \/>\n40%<\/p>\n<p>CPU<br \/>\n72%<br \/>\n91%<\/p>\n<p><strong>Prueba 1 (50 conexiones)<\/strong><\/p>\n<p>N\u00famero de transacciones en 10 minutos<br \/>\n74169<br \/>\n32445<\/p>\n<p>Transacciones\/seg<br \/>\n123<br \/>\n54<\/p>\n<p>Latencia media<br \/>\n405 ms<br \/>\n925 ms<\/p>\n<p><strong>Prueba 2 (150 conexiones con 100 posibles)<\/strong><\/p>\n<p>N\u00famero de transacciones en 10 minutos<br \/>\n81727<br \/>\n31429<\/p>\n<p>Transacciones\/seg<br \/>\n136<br \/>\n52<\/p>\n<p>Latencia media<br \/>\n550 ms<br \/>\n1432 ms<\/p>\n<p><strong>Sobre los tama\u00f1os<\/strong><\/p>\n<p>Tama\u00f1o de la base de datos<br \/>\n2251 MB<br \/>\n2262 MB<\/p>\n<p>Tama\u00f1o de los registros de la base de datos<br \/>\n0 MB<br \/>\n4587 MB<\/p>\n<p>\nEn resumen: una auditor\u00eda completa no es muy buena. El volumen de datos de la auditor\u00eda ser\u00e1 igual al de los datos en la propia base de datos, o incluso m\u00e1s. Este volumen de registro que se genera al trabajar con la base de datos es un problema com\u00fan en producci\u00f3n.<\/p>\n<p>Veamos otros par\u00e1metros:<\/p>\n<ul>\n<li>La velocidad no cambia mucho: sin registro \u2014 43.74 seg, con registro \u2014 53.23 seg.<\/li>\n<li>El rendimiento de la RAM y CPU se ver\u00e1 afectado, ya que se necesita generar un archivo de auditor\u00eda. Esto tambi\u00e9n es notable en producci\u00f3n.<\/li>\n<\/ul>\n<p>\nAl aumentar el n\u00famero de conexiones, naturalmente, los indicadores empeorar\u00e1n un poco.<\/p>\n<p>En las corporaciones con auditor\u00eda es a\u00fan m\u00e1s complicado:<\/p>\n<ul>\n<li>hay muchos datos;<\/li>\n<li>la auditor\u00eda no solo se necesita a trav\u00e9s de syslog en SIEM, sino tambi\u00e9n en archivos: si algo ocurre con syslog, debe haber un archivo cerca de la base de datos donde se almacenen los datos;<\/li>\n<li>para la auditor\u00eda se necesita una estanter\u00eda separada, para no perjudicar el I\/O de los discos, ya que ocupa mucho espacio;<\/li>\n<li>a veces, es necesario que los empleados de seguridad de la informaci\u00f3n requieran las normativas GOST, exigen la identificaci\u00f3n conforme a estas normas.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Restricci\u00f3n del acceso a los datos<\/h2>\n<p>\nVeamos las tecnolog\u00edas que se utilizan para proteger los datos y el acceso a ellos en bases de datos comerciales y de c\u00f3digo abierto.<\/p>\n<p>Qu\u00e9 se puede utilizar en general:<\/p>\n<ol>\n<li>Cifrado y ofuscaci\u00f3n de procedimientos y funciones (Wrapping) \u2014 es decir, herramientas y utilidades que convierten el c\u00f3digo legible en ilegible. Sin embargo, despu\u00e9s no se puede cambiar ni refactorizar de nuevo. Este enfoque a veces se requiere al menos en el lado de la base de datos, ya que la l\u00f3gica de las restricciones de licencia o de la autorizaci\u00f3n se cifra espec\u00edficamente a nivel de procedimiento y funci\u00f3n.<\/li>\n<li>La restricci\u00f3n de visibilidad de datos por filas (RLS) es cuando diferentes usuarios ven una misma tabla, pero con distintos conjuntos de filas, es decir, a algunas personas no se les puede mostrar ciertos datos a nivel de filas.<\/li>\n<li>La edici\u00f3n de datos mostrados (Masking) es cuando los usuarios en una misma columna de la tabla ven o los datos o solo asteriscos, es decir, para algunos usuarios la informaci\u00f3n estar\u00e1 oculta. La tecnolog\u00eda determina qu\u00e9 se le muestra a cada usuario seg\u00fan el nivel de acceso.<\/li>\n<li>La delimitaci\u00f3n del acceso Security DBA\/Application DBA\/DBA se refiere m\u00e1s bien a la restricci\u00f3n del acceso a la propia base de datos, permitiendo desconectar a los empleados de seguridad de los administradores de bases de datos y administradores de aplicaciones. En el open source hay pocas tecnolog\u00edas de este tipo, pero en bases de datos comerciales hay muchas. Son necesarias cuando hay muchos usuarios con acceso a los servidores.<\/li>\n<li>Restricci\u00f3n de acceso a archivos a nivel del sistema de archivos. Se pueden otorgar derechos y privilegios de acceso a directorios, de modo que cada administrador solo tenga acceso a los datos necesarios.<\/li>\n<li>El acceso mandatorio y la limpieza de memoria son tecnolog\u00edas que se aplican poco.<\/li>\n<li>El cifrado de extremo a extremo en la base de datos es el cifrado del lado del cliente con la gesti\u00f3n de claves en el lado del servidor.<\/li>\n<li>Cifrado de datos. Por ejemplo, cifrado a nivel de columna: cuando se utiliza un mecanismo que cifra una columna espec\u00edfica de la base de datos.<\/li>\n<\/ol>\n<p><\/p>\n<h3>\u00bfC\u00f3mo afecta esto al rendimiento de la base de datos?<\/h3>\n<p>\nVeamos el ejemplo del cifrado a nivel de columna en PostgreSQL. Hay un m\u00f3dulo pgcrypto que permite almacenar campos seleccionados encriptados. Esto es \u00fatil cuando solo algunos datos tienen valor. Para leer los campos encriptados, el cliente env\u00eda la clave de descifrado, el servidor descifra los datos y se los entrega al cliente. Sin la clave, nadie podr\u00e1 hacer nada con sus datos.<\/p>\n<p><strong>Realizaremos una prueba con pgcrypto<\/strong>. Crearemos una tabla con datos cifrados y otra con datos normales. A continuaci\u00f3n, los comandos para crear las tablas, siendo el primer comando el \u00fatil para crear la extensi\u00f3n registrando la base de datos:<\/p>\n<pre><code class=\"plaintext\">CREATE EXTENSION pgcrypto;\nCREATE TABLE t1 (id integer, text1 text, text2 text);\nCREATE TABLE t2 (id integer, text1 bytea, text2 bytea);\nINSERT INTO t1 (id, text1, text2)\nVALUES (generate_series(1,10000000), generate_series(1,10000000)::text, generate_series(1,10000000)::text);\nINSERT INTO t2 (id, text1, text2) VALUES (\ngenerate_series(1,10000000),\nencrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'),\nencrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'));<\/code><\/pre>\n<p>\nA continuaci\u00f3n, intentaremos hacer una selecci\u00f3n de datos de cada tabla y observaremos los tiempos de ejecuci\u00f3n.<\/p>\n<p><strong>Selecci\u00f3n de la tabla sin funci\u00f3n de encriptaci\u00f3n<\/strong>:<\/p>\n<pre><code class=\"plaintext\">psql -c \"timing\" -c \"select * from t1 limit 1000;\" \"host=192.168.220.129 dbname=taskdb\nuser=postgres sslmode=disable\" &gt; 1.txt<\/code><\/pre>\n<p>\nEl cron\u00f3metro est\u00e1 activado.<\/p>\n<p>\u00a0\u00a0id | text1 | text2<br \/>\n\u2014\u2014+\u2014\u2014\u2014+\u2014\u2014\u2014-<br \/>\n 1 | 1 \u00a0 \u00a0 | 1<br \/>\n 2 | 2 \u00a0 \u00a0 | 2<br \/>\n 3 | 3 \u00a0 \u00a0 | 3<br \/>\n\u2026<br \/>\n997 | 997 \u00a0 | 997<br \/>\n998 | 998 \u00a0 | 998<br \/>\n999 | 999 \u00a0 | 999<br \/>\n1000 | 1000\u00a0 | 1000<br \/>\n(1000 l\u00edneas)<\/p>\n<p>Tiempo: 1,386 ms<\/p>\n<p><strong>Selecci\u00f3n de la tabla con funci\u00f3n de encriptaci\u00f3n:<\/strong><\/p>\n<pre><code class=\"plaintext\">psql -c \"timing\" -c \"select id, decrypt(text1, 'key'::bytea, 'bf'),\ndecrypt(text2, 'key'::bytea, 'bf') from t2 limit 1000;\"\n\"host=192.168.220.129 dbname=taskdb user=postgres sslmode=disable\" &gt; 2.txt<\/code><\/pre>\n<p>\nEl cron\u00f3metro est\u00e1 activado.<\/p>\n<p>\u00a0\u00a0id | decrypt | decrypt<br \/>\n\u2014\u2014\u2014+\u2014\u2014\u2014-\u2014\u2014\u2014+\u2014\u2014\u2014-\u2014\u2014\u2014<br \/>\n 1 | x31 | x31<br \/>\n 2 | x32 | x32<br \/>\n 3 | x33 | x33<br \/>\n\u2026<br \/>\n999 | x393939 | x393939<br \/>\n1000 | x31303030 | x31303030<br \/>\n(1000 l\u00edneas)<\/p>\n<p>Tiempo: 50,203 ms<\/p>\n<p><strong>No voy a escribir mucho texto explicativo aqu\u00ed, solo compartir\u00e9 los resultados obtenidos. Las pruebas se realizaron en 3 m\u00e1quinas f\u00edsicas (12 CPU, 384GB RAM, 15k SAS DISK, 10GBit\/s Net), los brokers y zookeeper se desplegaron en lxc.<\/strong>:<\/p>\n<p>\u00a0<br \/>\n<strong>Sin encriptaci\u00f3n<\/strong><br \/>\n<strong>Pgcrypto (decrypt)<\/strong><\/p>\n<p>Selecci\u00f3n de 1000 l\u00edneas<br \/>\n1,386 ms<br \/>\n50,203 ms<\/p>\n<p>CPU<br \/>\n15%<br \/>\n35%<\/p>\n<p>RAM<br \/>\n\u00a0<br \/>\n+5%<\/p>\n<p>\nLa encriptaci\u00f3n impacta significativamente en el rendimiento. Se puede ver que el tiempo ha aumentado, ya que las operaciones de descifrado de datos encriptados (y el descifrado generalmente est\u00e1 envuelto en su l\u00f3gica) requieren recursos considerables. Es decir, la idea de encriptar todas las columnas que contienen alg\u00fan dato conlleva a una disminuci\u00f3n del rendimiento.<\/p>\n<p>Sin embargo, la encriptaci\u00f3n no es una soluci\u00f3n m\u00e1gica que resuelva todos los problemas. Los datos descifrados y la clave de descifrado durante el proceso de descifrado y transmisi\u00f3n de datos est\u00e1n en el servidor. Por lo tanto, las claves pueden ser interceptadas por aquellos que tienen acceso total al servidor de base de datos, como el administrador del sistema.<\/p>\n<p>Cuando hay una clave para toda la columna para todos los usuarios (incluso si no es para todos, sino para un conjunto limitado de clientes), esto no siempre es bueno ni correcto. Es por eso que se ha comenzado a implementar la encriptaci\u00f3n de extremo a extremo, en las bases de datos se comenzaron a considerar opciones de encriptaci\u00f3n de datos desde el lado del cliente y del servidor, y aparecieron esos mismos almacenes de claves \u2014 productos separados que aseguran la gesti\u00f3n de claves en el lado de la base de datos.<\/p>\n<p><img decoding=\"async\" alt=\"Seguridad y bases de datos: qu\u00e9 tener en cuenta al elegir medios de protecci\u00f3n.\" src=\"\/wp-content\/uploads\/2020\/05\/cbaa7b9579a65963518ba3cec6114842.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.mongodb.com\/manual\/core\/security-client-side-encryption\/\"><i>Ejemplo de tal encriptaci\u00f3n en MongoDB<\/i><\/a><\/noindex><\/p>\n<h2>Medidas de seguridad en bases de datos comerciales y de c\u00f3digo abierto<\/h2>\n<p><\/p>\n<p><strong>Funciones<\/strong><br \/>\n<strong>Tipo<\/strong><br \/>\n<strong>Pol\u00edtica de Contrase\u00f1as<\/strong><br \/>\n<strong>Auditor\u00eda<\/strong><br \/>\n<strong>Protecci\u00f3n del c\u00f3digo fuente de procedimientos y funciones<\/strong><br \/>\n<strong>RLS<\/strong><br \/>\n<strong>Encriptaci\u00f3n<\/strong><\/p>\n<p><strong>Oracle<\/strong><br \/>\nComercial<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<\/p>\n<p><strong>MsSql<\/strong><br \/>\nComercial<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.gaz-is.ru\/produkty\/inform-sistemy\/subd-jatoba.html\"><strong>Jatoba<\/strong><\/a><\/noindex><br \/>\nComercial<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\n+<br \/>\nextensiones<\/p>\n<p><strong>PostgreSQL<\/strong><br \/>\nGratis<br \/>\nextensiones<br \/>\nextensiones<br \/>\n\u2014<br \/>\n+<br \/>\nextensiones<\/p>\n<p><strong>MongoDb<\/strong><br \/>\nGratis<br \/>\n\u2014<br \/>\n+<br \/>\n\u2014<br \/>\n\u2014<br \/>\nDisponible solo en MongoDB Enterprise<\/p>\n<p>\nLa tabla est\u00e1 lejos de ser completa, pero la situaci\u00f3n es la siguiente: en los productos comerciales, las cuestiones de seguridad se han abordado durante mucho tiempo, en el c\u00f3digo abierto, por lo general, se utilizan algunas extensiones para la seguridad, faltan muchas funciones y a veces es necesario escribir algo. Por ejemplo, las pol\u00edticas de contrase\u00f1as: en PostgreSQL hay muchas extensiones diferentes.<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/postgres\/postgres\/tree\/master\/contrib\/passwordcheck\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ykrysko\/passwordcheck\">2<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/michaelpq\/pg_plugins\/tree\/master\/passwordcheck_extra\">3<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/devrimgunduz\/passwordcheck_cracklib\">4<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/asio\/password\">5<\/a><\/noindex>), que implementan pol\u00edticas de contrase\u00f1a, pero a mi parecer, ninguna cubre todas las necesidades del segmento corporativo nacional.<\/p>\n<p><strong>\u00bfQu\u00e9 hacer si no hay nada de lo que se necesita?<\/strong>? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0421\u0423\u0411\u0414, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a.<\/p>\n<p>Entonces se pueden utilizar soluciones de terceros que funcionan con diferentes SGBD, como \u2018Crypto DB\u2019 o \u2018Garda DB\u2019. En cuanto a las soluciones del segmento nacional, all\u00ed conocen mejor las normas GOST que en el open source.<\/p>\n<p>La segunda opci\u00f3n es escribir por cuenta propia lo que se necesita, implementar a nivel de procedimientos el acceso a los datos y la encriptaci\u00f3n en la aplicaci\u00f3n. Sin embargo, con el GOST ser\u00e1 m\u00e1s complicado. Pero en general, se puede ocultar los datos como se necesita, almacenarlos en el SGBD y luego extraerlos y desencriptarlos correctamente, directamente a nivel de la aplicaci\u00f3n. Al mismo tiempo, piensen en c\u00f3mo van a proteger estos algoritmos a nivel de la aplicaci\u00f3n. En nuestra opini\u00f3n, esto debe hacerse a nivel de SGBD, ya que as\u00ed funcionar\u00e1 m\u00e1s r\u00e1pido.<\/p>\n<p>Esta presentaci\u00f3n se pronunci\u00f3 por primera vez en <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-1\/\">@Databases Meetup<\/a><\/noindex> por Mail.ru Cloud Solutions. Vea<noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/redirect?q=https%3A%2F%2Fbit.ly%2F2U57FAd&amp;redir_token=XNWSBN1AKQA2sjhdReDAv6VnkOV8MTU4OTAxNjMwMEAxNTg4OTI5OTAw&amp;v=wigSv2_zWBU&amp;event=video_description\"> videos <\/a><\/noindex>otras presentaciones y suscr\u00edbase a los anuncios de eventos en Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Alrededor de Kubernetes en Mail.ru Group<\/a><\/noindex>.<\/p>\n<p><strong>Lecturas adicionales sobre el tema<\/strong>:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/472694\/\">M\u00e1s que Ceph: almacenamiento en bloque de la nube MCS<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/blog\/kakuyu-bazu-dannyh-vybrat-dlya-proekta-chtoby-ne-oshibitsya\">C\u00f3mo elegir una base de datos para el proyecto, para no tener que elegir de nuevo.<\/a><\/noindex>.<\/li>\n<\/ol>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/500708\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441 \u0420\u043e\u0436\u043a\u043e\u0432, \u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u041f\u041e \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u00ab\u0413\u0430\u0437\u0438\u043d\u0444\u043e\u0440\u043c\u0441\u0435\u0440\u0432\u0438\u0441\u00bb, \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 Jatoba. \u0417\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043d\u043e\u0440\u043c\u044b \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0442\u0440\u0435\u0442\u044c\u0438 \u043b\u0438\u0446\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u0430\u0436\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b: \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430\u043c\u0438 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81885,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81884","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u0421\u0423\u0411\u0414: \u043e \u0447\u0451\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u0449\u0438\u0442\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-17T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-17T11:42:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Seguridad y SGBD: sobre lo que hay que recordar, al seleccionar medios de protecci\u00f3n | ProHoster","description":"Me llamo Denis.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u0421\u0423\u0411\u0414: \u043e \u0447\u0451\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u044f \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u0449\u0438\u0442\u044b | ProHoster","og:description":"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u0435\u043d\u0438\u0441.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/bezopasnost-i-subd-o-chyom-nado-pomnit-podbiraya-sredstva-zashhity","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-17T11:42:18+00:00","article:modified_time":"2020-05-17T11:42:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81884","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:48:24","updated":"2022-10-05 02:01:28","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/81884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=81884"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/81884\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/81885"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=81884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=81884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=81884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}