<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>odczyt &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/odczyt/feed/" rel="self" type="application/rss+xml" />
	<link>https://solr.pl</link>
	<description>All things to be found - Blog related to Apache Solr &#38; Lucene projects - https://solr.apache.org</description>
	<lastBuildDate>Sat, 14 Nov 2020 11:55:49 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>Kolekcje tylko do odczytu</title>
		<link>https://solr.pl/2019/10/07/kolekcje-tylko-do-odczytu/</link>
					<comments>https://solr.pl/2019/10/07/kolekcje-tylko-do-odczytu/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 07 Oct 2019 10:55:15 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[kolekcja]]></category>
		<category><![CDATA[odczyt]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=794</guid>

					<description><![CDATA[Zastanawialiście się kiedyś w jaki sposób zapobiec przypadkowym modyfikacjom kolekcji przez aplikację korzystającą z Solr, bądź przez osobę mającą dostęp do Solr? Oczywiście możemy zabrać dostęp i jest to jedno z rozwiązań, aczkolwiek nie zawsze jest to możliwe. W dzisiejszym]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Zastanawialiście się kiedyś w jaki sposób zapobiec przypadkowym modyfikacjom kolekcji przez aplikację korzystającą z Solr, bądź przez osobę mającą dostęp do Solr? Oczywiście możemy zabrać dostęp i jest to jedno z rozwiązań, aczkolwiek nie zawsze jest to możliwe. W dzisiejszym wpisie dowiemy się w jaki sposób możliwe jest zabezpieczenie kolekcji przed zapisem dzięki konfiguracji kolekcji w trybie tylko do odczytu. </p>



<span id="more-794"></span>



<h2 class="wp-block-heading">Zachowanie domyślne</h2>



<p class="wp-block-paragraph">W przypadku kiedy tworzymy naszą kolekcję, czy to za pomocą API, czy skryptu <em>bin/solr</em> jest ona tworzona w trybie umożliwiającym zarówno zapis, jak i odczyt. Stwórzmy sobie zatem kolekcję za pomocą następującego polecenia:</p>



<p><pre class="wp-block-preformatted">$ bin/solr create_collection -c readonly</pre></p>



<p class="wp-block-paragraph">Działamy w oparciu o Solr 8.2, a zatem powyższe polecenie wykorzysta konfigurację o nazwie <em>_default</em> domyślnie dostarczaną wraz z SolrCloud. Pozwoli to nam na wysłanie prostego dokumentu za pomocą poniższego polecenia:</p>



<p><pre class="wp-block-preformatted">$ curl -XPOST -H 'Content-Type:application/json' 'http://localhost:8983/solr/readonly/update' -d '[<br>  {<br>   "id" : 1,<br>   "name" : "Test document"<br>  }<br> ]'</pre></p>



<p class="wp-block-paragraph">Oczywiście odpowiedź Solr w tym wypadku sugeruje nam, iż indeksowanie odbyło się bez żadnych niespodzianek, a dokument został przetworzony i zaindeksowany poprawnie:</p>



<p><pre class="wp-block-preformatted">{<br>   "responseHeader":{<br>     "rf":1,<br>     "status":0,<br>     "QTime":168}}</pre></p>



<h2 class="wp-block-heading">Kolekcja tylko do odczytu</h2>



<p class="wp-block-paragraph">Jeżeli chcielibyśmy, aby nasza kolekcja została oznaczona jako tylko do odczytu, a zatem, aby jej modyfikacje nie były możliwe, należy ustawić atrybut kolekcji <em>readOnly</em> na wartość <em>true</em>. W tym celu korzystamy z następującego wywołania Collections API:</p>



<p><pre class="wp-block-preformatted">$ curl -XGET 'localhost:8983/solr/admin/collections?action=MODIFYCOLLECTION&amp;collection=readonly&amp;readOnly=true'</pre></p>



<p class="wp-block-paragraph">Odpowiedź Solr powinna wyglądać mniej, więcej tak:</p>



<p><pre class="wp-block-preformatted">{<br>   "responseHeader":{<br>     "status":0,<br>     "QTime":846},<br>   "success":{<br>     "192.168.0.20:8983_solr":{<br>       "responseHeader":{<br>         "status":0,<br>         "QTime":724}}}}</pre></p>



<p class="wp-block-paragraph">Możemy zatem testować, czy na pewno nasza kolekcja jest tylko do odczytu. </p>



<p class="wp-block-paragraph">Zacznijmy od prostego indeksowania:</p>



<p><pre class="wp-block-preformatted">$ curl -XPOST -H 'Content-Type:application/json' 'http://localhost:8983/solr/readonly/update' -d '[<br>  {<br>   "id" : 2,<br>   "name" : "Second test document"<br>  }<br> ]'</pre></p>



<p class="wp-block-paragraph">W odpowiedzi Solr zwraca nam błąd:</p>



<p><pre class="wp-block-preformatted">{<br>   "responseHeader":{<br>     "status":403,<br>     "QTime":1},<br>   "error":{<br>     "metadata":[<br>       "error-class","org.apache.solr.common.SolrException",<br>       "root-error-class","org.apache.solr.common.SolrException"],<br>     "msg":"Collection readonly is read-only.",<br>     "code":403}}</pre></p>



<p class="wp-block-paragraph">A co, jeżeli spróbujemy skorzystać z Schema API, np. w celu dodania nowego pola? Możemy to sprawdzić wykorzystując następujące polecenie:</p>



<p><pre class="wp-block-preformatted">$ curl -XPOST -H 'Content-type:application/json' 'http://localhost:8983/solr/readonly/schema' --data-binary '{<br>  "add-field" : {<br>   "name" : "test",<br>   "type" : "string",<br>   "stored" : true,<br>   "indexed" : true<br>  }<br> }' </pre></p>



<p class="wp-block-paragraph">W tym wypadku operacja udała się:</p>



<p><pre class="wp-block-preformatted">{<br>   "responseHeader":{<br>     "status":0,<br>     "QTime":479}}</pre></p>



<h2 class="wp-block-heading">Umożliwienie modyfikacji</h2>



<p class="wp-block-paragraph">W celu ponownego umożliwienia indeksowania danych wystarczy ponownie korzystać z Collections API ustawiając atrybut <em>readOnly</em> kolekcji na wartość <em>false</em>:</p>



<p><pre class="wp-block-preformatted">$ curl -XGET 'localhost:8983/solr/admin/collections?action=MODIFYCOLLECTION&amp;collection=readonly&amp;readOnly=false'</pre></p>



<h2 class="wp-block-heading">Podsumowanie</h2>



<p class="wp-block-paragraph">Jak pokazuje powyższy przykład, wraz z Solr 8.1, dostaliśmy prostą, aczkolwiek skuteczną metodę ochrony kolekcji przed modyfikacją dokumentów w niej zawartych. Jeżeli nasza aplikacja korzysta z kolekcji, które mogą być oznaczone, jako tylko do odczytu, to warto się nad tym zastanowić. Może nam to oszczędzić potencjalnych problemów w przypadku błędów naszej aplikacji. Wraz z możliwościami autoryzacji i autentykacji w SolrCloud, możemy również ograniczyć dostęp do Collections API, a tym samym ograniczyć możliwość ponownego włączenia zapisu do kolekcji dojąc kolejny poziom zabezpieczeń.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2019/10/07/kolekcje-tylko-do-odczytu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
