<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Pages on BareSQL.com</title>
    <link>https://baresql.com/pages/</link>
    <description>Recent content in Pages on BareSQL.com</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <atom:link href="https://baresql.com/pages/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>About</title>
      <link>https://baresql.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://baresql.com/about/</guid>
      <description>&lt;p&gt;BareSQL.com is the home of BareSQL, one small program with two tools for SQL databases. BareSQL Audit tells you which PostgreSQL login can read which column, and how. BareSQL Portable tells you where SQL meant for SQLite, PostgreSQL, MySQL and MariaDB fails or gives different answers. Both are free and open source.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-name&#34;&gt;The Name&lt;/h2&gt;&#xA;&lt;p&gt;The bare in BareSQL is meant two ways, one for each tool.&lt;/p&gt;&#xA;&lt;p&gt;BareSQL Audit lays a database&amp;rsquo;s access bare. Grants pile up over the years, roles sit inside other roles, views read tables with their owner&amp;rsquo;s rights and default privileges hand new tables to everyone. The audit cuts through all of that and lists, for every login, each column it can read and the exact route that gets it there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>BareSQL Audit</title>
      <link>https://baresql.com/audit/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://baresql.com/audit/</guid>
      <description>&lt;p&gt;BareSQL Audit logs in to a PostgreSQL database and works out, for every login, each column it can read and the route that gets it there. It marks the columns that hold personal data and adds findings for the setups that usually end in a leak. It supports PostgreSQL 13 to 18.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;baresql audit &amp;#34;postgres://auditor@db.example.com/shop?sslmode=verify-full&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The audit prints a summary and writes two files. &lt;code&gt;report.html&lt;/code&gt; is a page to read and share, and &lt;code&gt;audit.json&lt;/code&gt; holds the same facts for scripts and for comparing with the next audit. This is the summary for the sample shop database the tests build:&lt;/p&gt;</description>
    </item>
    <item>
      <title>BareSQL Portable</title>
      <link>https://baresql.com/portable/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://baresql.com/portable/</guid>
      <description>&lt;p&gt;BareSQL Portable checks SQL that has to run on SQLite, PostgreSQL, MySQL and MariaDB. It knows 58 differences between those engines: 35 where at least one engine refuses the statement, 15 where every engine runs it and the answers differ, and 8 where the answers differ only for some data. Each one was run on all four engines, and each comes with a form that answers the same everywhere, where one exists.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://baresql.com/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://baresql.com/contact/</guid>
      <description>&lt;p&gt;BareSQL.com would like to hear from anyone who tries BareSQL, about what it found and what it missed.&lt;/p&gt;&#xA;&lt;p&gt;Bug reports help most: an audit line the server disagrees with, a lint message that&amp;rsquo;s wrong for your engine, two answers that compare called equal and aren&amp;rsquo;t, or anything else that looks off. Ideas are welcome too, for a check BareSQL doesn&amp;rsquo;t do yet or a SQL difference it doesn&amp;rsquo;t know.&lt;/p&gt;&#xA;&lt;p&gt;Write to &lt;strong&gt;&lt;a href=&#34;mailto:info@baresql.com&#34;&gt;info@baresql.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Download BareSQL</title>
      <link>https://baresql.com/download/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://baresql.com/download/</guid>
      <description>&lt;p&gt;The &lt;code&gt;baresql&lt;/code&gt; command is one file with nothing else to install. Each archive below holds it with its license files, the README and the changelog. The links always point to the latest release.&lt;/p&gt;&#xA;&lt;div style=&#34;overflow-x:auto&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;System&lt;/th&gt;&#xA;          &lt;th&gt;Download&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Linux, x86-64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/softdevstudio/baresql/releases/latest/download/baresql_linux_amd64.tar.gz&#34;&gt;baresql_linux_amd64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Linux, ARM64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/softdevstudio/baresql/releases/latest/download/baresql_linux_arm64.tar.gz&#34;&gt;baresql_linux_arm64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;macOS, Apple silicon&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/softdevstudio/baresql/releases/latest/download/baresql_darwin_arm64.tar.gz&#34;&gt;baresql_darwin_arm64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;macOS, Intel&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/softdevstudio/baresql/releases/latest/download/baresql_darwin_amd64.tar.gz&#34;&gt;baresql_darwin_amd64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Windows, x86-64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/softdevstudio/baresql/releases/latest/download/baresql_windows_amd64.zip&#34;&gt;baresql_windows_amd64.zip&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;em&gt;Checksums are in &lt;a href=&#34;https://github.com/softdevstudio/baresql/releases/latest/download/SHA256SUMS&#34;&gt;SHA256SUMS&lt;/a&gt;. Every release is listed on &lt;a href=&#34;https://github.com/softdevstudio/baresql/releases&#34;&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&gt;&#xA;&lt;p&gt;On Linux or macOS:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tar -xzf baresql_linux_amd64.tar.gz&#xA;sudo mv baresql /usr/local/bin/&#xA;baresql version&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The binaries are static, so the Linux ones run on any distribution. The macOS binaries aren&amp;rsquo;t signed by Apple, so macOS may block the first run; allow it in System Settings under Privacy &amp;amp; Security, or run &lt;code&gt;xattr -d com.apple.quarantine baresql&lt;/code&gt;. On Windows, unzip the archive and put &lt;code&gt;baresql.exe&lt;/code&gt; in a folder on your PATH.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick Start</title>
      <link>https://baresql.com/quick-start/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://baresql.com/quick-start/</guid>
      <description>&lt;p&gt;BareSQL is one program, &lt;code&gt;baresql&lt;/code&gt;. BareSQL Audit is its &lt;code&gt;audit&lt;/code&gt; and &lt;code&gt;diff&lt;/code&gt; commands, and BareSQL Portable is &lt;code&gt;lint&lt;/code&gt;, &lt;code&gt;compare&lt;/code&gt; and &lt;code&gt;rules&lt;/code&gt;. Get it from the &lt;a href=&#34;https://baresql.com/download/&#34;&gt;download page&lt;/a&gt; and check that it runs:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;baresql version&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;audit-a-postgresql-database&#34;&gt;Audit a PostgreSQL Database&lt;/h2&gt;&#xA;&lt;p&gt;Give &lt;code&gt;baresql audit&lt;/code&gt; a connection string, the same as for &lt;code&gt;psql&lt;/code&gt;. Leave the password out of it: BareSQL reads &lt;code&gt;PGPASSWORD&lt;/code&gt; and &lt;code&gt;~/.pgpass&lt;/code&gt; like every PostgreSQL tool.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;export PGPASSWORD=...&#xA;baresql audit &amp;#34;postgres://auditor@db.example.com/shop?sslmode=verify-full&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It prints a short summary. This one is for the sample shop database BareSQL is tested on:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reference</title>
      <link>https://baresql.com/reference/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://baresql.com/reference/</guid>
      <description>&lt;p&gt;Every command and flag of &lt;code&gt;baresql&lt;/code&gt;, as of version 0.1.0. &lt;code&gt;baresql help&lt;/code&gt; lists the commands in the terminal and &lt;code&gt;baresql help COMMAND&lt;/code&gt; shows the flags of one. A flag works with one dash or two, so &lt;code&gt;-out&lt;/code&gt; and &lt;code&gt;--out&lt;/code&gt; are the same. The &lt;a href=&#34;https://github.com/softdevstudio/baresql#readme&#34;&gt;README on GitHub&lt;/a&gt; is the full manual.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;baresql audit [flags] [connection]      who can read what in a PostgreSQL database&#xA;baresql diff old.json new.json          compare two audits and list what changed&#xA;baresql lint [flags] file.sql ...       SQL that answers differently on SQLite, PostgreSQL, MySQL, MariaDB&#xA;baresql compare [engines] file.sql ...  run SQL on several engines and show where the answers differ&#xA;baresql rules [code]                    the differences lint knows, with each engine&amp;#39;s recorded answer&#xA;baresql version                         print the version&#xA;baresql help [command]                  show help&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;audit&#34;&gt;audit&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;baresql audit [flags] [connection]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Flag&lt;/th&gt;&#xA;          &lt;th&gt;Meaning&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;--out DIR&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;where to write report.html and audit.json (default &lt;code&gt;baresql-report&lt;/code&gt;)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;--login NAME&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;audit only these logins (repeat, or separate with commas)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;--schema NAME&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;audit only these schemas (repeat, or separate with commas)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;--no-sample&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;read no table data: find personal data by column names only&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;--sample-rows N&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;rows to read per table when sampling, 1 to 10000 (default 200)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;--baseline FILE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;an earlier audit.json: exit 1 if any login can now reach more&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;--timeout D&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;time limit for each query, such as &lt;code&gt;30s&lt;/code&gt; (default 60s)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;--format F&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;what to print: &lt;code&gt;summary&lt;/code&gt; (default), &lt;code&gt;lines&lt;/code&gt; (one fact per line) or &lt;code&gt;json&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The connection is a &lt;code&gt;postgres://&lt;/code&gt; URL or a &lt;code&gt;key=value&lt;/code&gt; string, as for &lt;code&gt;psql&lt;/code&gt;. Whatever it leaves out comes from the usual &lt;code&gt;PG*&lt;/code&gt; variables (&lt;code&gt;PGHOST&lt;/code&gt;, &lt;code&gt;PGUSER&lt;/code&gt;, &lt;code&gt;PGPASSWORD&lt;/code&gt; and the rest) and from &lt;code&gt;~/.pgpass&lt;/code&gt;, so the password never has to be on the command line. TLS follows &lt;code&gt;sslmode&lt;/code&gt;: &lt;code&gt;disable&lt;/code&gt;, &lt;code&gt;prefer&lt;/code&gt; (the default), &lt;code&gt;require&lt;/code&gt;, &lt;code&gt;verify-ca&lt;/code&gt; or &lt;code&gt;verify-full&lt;/code&gt;, with &lt;code&gt;sslrootcert&lt;/code&gt; for the certificate authority; &lt;code&gt;sslrootcert=system&lt;/code&gt; uses the system&amp;rsquo;s certificates and implies &lt;code&gt;verify-full&lt;/code&gt;. Unix sockets work as with &lt;code&gt;psql&lt;/code&gt; (&lt;code&gt;host=/var/run/postgresql&lt;/code&gt;). The login uses SCRAM-SHA-256 (with channel binding over TLS), MD5 or a cleartext password, whichever the server asks for.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sample Reports</title>
      <link>https://baresql.com/sample-reports/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://baresql.com/sample-reports/</guid>
      <description>&lt;p&gt;These reports are exactly what BareSQL Audit wrote for the databases its tests build. Each database is made up, with invented people in it, and planted with mistakes that turn up in real ones, plus near misses that look like mistakes and aren&amp;rsquo;t. For the four databases below, the tests check every line of the audit on PostgreSQL 13 to 18, so a change to BareSQL that alters one of them fails before it ships.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
