<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mariana Ferreira</title>
    <description>The latest articles on DEV Community by Mariana Ferreira (@ferreira_mariana).</description>
    <link>https://dev.to/ferreira_mariana</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F393807%2F5767fc94-20c2-409a-a3c8-4ff46c11f893.jpeg</url>
      <title>DEV Community: Mariana Ferreira</title>
      <link>https://dev.to/ferreira_mariana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ferreira_mariana"/>
    <language>en</language>
    <item>
      <title>npm install falls into timeout, what can you do?</title>
      <dc:creator>Mariana Ferreira</dc:creator>
      <pubDate>Sun, 07 Jul 2024 20:24:07 +0000</pubDate>
      <link>https://dev.to/ferreira_mariana/npm-install-falls-into-timeout-what-can-you-do-42i7</link>
      <guid>https://dev.to/ferreira_mariana/npm-install-falls-into-timeout-what-can-you-do-42i7</guid>
      <description>&lt;p&gt;&lt;code&gt;npm install&lt;/code&gt; falls into timeout a couple of times and you can't install your packages? &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7a699uk5x44u1jce9z7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7a699uk5x44u1jce9z7v.png" alt="err socket timeout"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If your internet is slow and you have many dependencies, try this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm install --prefer-offline


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;npm install&lt;/code&gt; checks every package to see if there is a new version available for download.&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;--prefer-offline&lt;/code&gt; (&lt;a href="https://docs.npmjs.com/cli/v10/using-npm/config#prefer-offline" rel="noopener noreferrer"&gt;see documentation&lt;/a&gt;), if you already have a package installed in a version that matches your package.json, it will not check for the lastest version to download. Only if there is no version in the npm cache will it request these missing packages from the server.&lt;/p&gt;

&lt;p&gt;This is faster because it will check and install only the packages you don't have. And even if npm install times out again, the packages it downloaded in the meantime are now in the cache, so when you run &lt;code&gt;npm install --prefer-offline&lt;/code&gt; again, these packages will not be checked. Eventually, you'll install every package you need!&lt;/p&gt;

&lt;p&gt;Thank you for reading! If you have other tips about timeouts or installing npm packages faster, please feel free to share them in the comments.&lt;/p&gt;

</description>
      <category>npm</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>PostgreSQL: como permitir acesso de leitura a apenas algumas colunas de uma tabela?</title>
      <dc:creator>Mariana Ferreira</dc:creator>
      <pubDate>Sat, 22 May 2021 19:55:02 +0000</pubDate>
      <link>https://dev.to/ferreira_mariana/postgresql-como-permitir-acesso-de-leitura-a-apenas-algumas-colunas-de-uma-tabela-2918</link>
      <guid>https://dev.to/ferreira_mariana/postgresql-como-permitir-acesso-de-leitura-a-apenas-algumas-colunas-de-uma-tabela-2918</guid>
      <description>&lt;p&gt;Como fornecer acesso de leitura a algumas colunas de uma tabela e impedir o acesso as demais colunas para um certo usuário?&lt;/p&gt;

&lt;p&gt;Para exemplificar esse cenário, vou usar a base de dados &lt;a href="https://raw.githubusercontent.com/lerocha/chinook-database/master/ChinookDatabase/DataSources/Chinook_PostgreSql.sql" rel="noopener noreferrer"&gt;Chinook&lt;/a&gt; e a ferramenta &lt;a href="https://dbeaver.io/" rel="noopener noreferrer"&gt;DBeaver&lt;/a&gt; para administrar a base de dados.&lt;/p&gt;

&lt;p&gt;Primeiro, crie um usuário:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="n"&gt;mariana&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;PASSWORD&lt;/span&gt; &lt;span class="s1"&gt;'sua_senha'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Depois, crie uma view com apenas as colunas da tabela que você deseja permitir o acesso. Nesse caso, estou criando com as colunas "EmployeeId", "LastName", "FirstName", "Title", "Email" da tabela "Employee":&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;VIEW&lt;/span&gt; &lt;span class="n"&gt;employee_base_info&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="nv"&gt;"EmployeeId"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"LastName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"FirstName"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"Title"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;"Email"&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="nv"&gt;"Employee"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;A view é como uma tabela virtual, não é uma tabela que está de fato no banco e quando é referenciada essa query é executada.&lt;/p&gt;

&lt;p&gt;Depois, dê permissão de leitura na view para o usuário:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;

&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;employee_base_info&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;mariana&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Então, ao conectar no banco utilizando esse usuário, temos permissão de realizar uma consulta na view:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgntsp6tqo0ng5c3vo2s.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgntsp6tqo0ng5c3vo2s.PNG" alt="Print da tela do Dbeaver com a query:  raw `select * from employee_base_info` endraw  e abaixo as informações da tabela"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mas não temos permissão de consultar a tabela inteira:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yiulapkc4happ9mjr5n.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yiulapkc4happ9mjr5n.PNG" alt="Print da tela do Dbeaver com a query:  raw `select * from "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tampouco permissão de update:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft45f4lq0a3jovtl96ru3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft45f4lq0a3jovtl96ru3.PNG" alt="Print da tela do Dbeaver com a query:  raw `update "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com isso garantimos maior segurança para nosso banco de dados.&lt;/p&gt;

&lt;p&gt;Obrigada por ler! &lt;br&gt;
Se quiser saber mais, veja também a &lt;a href="https://www.postgresql.org/docs/9.2/sql-createview.html" rel="noopener noreferrer"&gt;documentação do PostgreSQL&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>sql</category>
    </item>
  </channel>
</rss>
