Переделал таблицу
This commit is contained in:
154
report.tex
154
report.tex
@@ -383,6 +383,8 @@ execute function update_statistics_on_judge_request_update();
|
||||
|
||||
Код запросов для создания пользователей и выдачи им необходимых прав представлен в листинге~\ref{lst:users}. По мимо стандартных прав на операции \texttt{insert}, \texttt{update}, \texttt{delete}, пользователю \texttt{readonly\_user} также необходимо предоставить права \texttt{usage} и \texttt{select} для объектов последовательностей, связанных с редактируемыми таблицами. Это особенность СУБД PostgreSQL, в которых последовательности выделены в отдельные объекты базы данных и, соответственно, для работы с ними необходимо явно предоставить пользователю права. Последовательности используются в PostgreSQL для автоинкрементных полей, в первую очередь для первичных ключей таблиц. Также обоим пользователем необходимо предоставить права на использование схемы базы данных, без этого разрешения пользователь даже при наличии прав на отдельные объекты внутри схемы не сможет к ним получить доступ.
|
||||
|
||||
Примеры различных операций от имён этих пользователей вместе с реакцией СУБД демонстрируются в таблице~\ref{tbl:users}.
|
||||
|
||||
\begin{lstlisting}[mathescape=true, caption={Код запросов для создания пользователей и выдачи им определённых прав.}, label={lst:users}]
|
||||
create user readonly_user with password '123';
|
||||
grant usage on schema public to readonly_user;
|
||||
@@ -402,57 +404,149 @@ grant usage, select on sequence shot_series_id_shot_series_seq to edit_user;
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\caption{Варианты действий и соответствующих запросов для проверки прав пользователей.}
|
||||
\caption{Сравнение результатов действий, выполненных от пользователей \texttt{readonly\_user} и \texttt{edit\_user}.}
|
||||
\label{tbl:users}
|
||||
\footnotesize
|
||||
\begin{tabularx}{\textwidth}{|c|X|X|}
|
||||
\hline
|
||||
\textbf{№} & \textbf{Действие} & \textbf{Код запроса} \\
|
||||
\textbf{№} & \textbf{edit\_user} & \textbf{readonly\_user} \\
|
||||
\hline
|
||||
1 & Просмотр содержимого представления & \specialcell{select * from \\ sportsman\_requests\_series\_count} \\
|
||||
|
||||
|
||||
\multirow{3}{*}{1} & \multicolumn{2}{c|}{Просмотр содержимого представления. }\\
|
||||
% \cline{2-3}
|
||||
& \multicolumn{2}{c|}{\specialcell{\texttt{select * from sportsman\_requests\_series\_count}}}\\
|
||||
\cline{2-3}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try1_edit_user.png}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try1_edit_user.png}
|
||||
\\
|
||||
\hline
|
||||
2 & Изменение данных через представление & \specialcell{insert into sportsman\_requests\_series\_count \\ (id\_sportsman, pr\_count, ss\_count) \\ values (100, 50, 25)} \\
|
||||
|
||||
\multirow{3}{*}{2} & \multicolumn{2}{c|}{Изменение данных через представление. }\\
|
||||
% \cline{2-3}
|
||||
& \multicolumn{2}{c|}{\specialcell{\texttt{insert into sportsman\_requests\_series\_count (id\_sportsman, pr\_count, ss\_count)}\\ \texttt{values (100, 50, 25)}}}\\
|
||||
\cline{2-3}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try2.png}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try2.png}
|
||||
\\
|
||||
\hline
|
||||
3 & Чтение данных из таблицы, несвязанной с представлением & \specialcell{select * from judge} \\
|
||||
|
||||
\multirow{3}{*}{3} & \multicolumn{2}{c|}{Чтение данных из таблицы, несвязанной с представлением. }\\
|
||||
% \cline{2-3}
|
||||
& \multicolumn{2}{c|}{\specialcell{\texttt{select * from judge}}}\\
|
||||
\cline{2-3}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try3.png}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try3.png}
|
||||
\\
|
||||
\hline
|
||||
4 & Чтение данных из таблицы \texttt{sportsman} & \specialcell{select * from sportsman} \\
|
||||
|
||||
\multirow{3}{*}{4} & \multicolumn{2}{c|}{Чтение данных из таблицы \texttt{sportsman}. }\\
|
||||
% \cline{2-3}
|
||||
& \multicolumn{2}{c|}{\specialcell{\texttt{select * from sportsman}}}\\
|
||||
\cline{2-3}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try4_edit_user.png}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try4_readonly_user.png}
|
||||
\\
|
||||
\hline
|
||||
5 & Чтение данных из таблицы \texttt{participant\_request} & \specialcell{select * from participant\_request} \\
|
||||
|
||||
\multirow{3}{*}{5} & \multicolumn{2}{c|}{Чтение данных из таблицы \texttt{participant\_request}. }\\
|
||||
% \cline{2-3}
|
||||
& \multicolumn{2}{c|}{\specialcell{\texttt{select * from participant\_request}}}\\
|
||||
\cline{2-3}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try5_edit_user.png}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try5_readonly_user.png}
|
||||
\\
|
||||
\hline
|
||||
6 & Чтение данных из таблицы \texttt{shot\_series} & \specialcell{select * from shot\_series} \\
|
||||
\hline
|
||||
7 & Добавление данных в таблицу \texttt{participant\_request} & \specialcell{insert into shot\_series (score, photo, \\ id\_participant\_request, id\_result\_in\_stage,\\ id\_judge\_request)
|
||||
values (10, \\'path/to/photo.jpg', 16784, 67368, 3403);} \\
|
||||
\hline
|
||||
8 & Добавление данных в таблицу, несвязанную с представлением & \specialcell{insert into judge (name, category, region,\\ federation)
|
||||
values ('Иван Иванов',\\ '1 категория', 'Санкт-Петербург',\\ 'Федерация');} \\
|
||||
|
||||
\multirow{3}{*}{6} & \multicolumn{2}{c|}{Чтение данных из таблицы \texttt{shot\_series}. }\\
|
||||
% \cline{2-3}
|
||||
& \multicolumn{2}{c|}{\specialcell{\texttt{select * from shot\_series}}}\\
|
||||
\cline{2-3}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try6_edit_user.png}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try6_readonly_user.png}
|
||||
\\
|
||||
\hline
|
||||
|
||||
\end{tabularx}
|
||||
\end{table}
|
||||
|
||||
|
||||
\begin{table}[h!]
|
||||
\centering
|
||||
\caption{Сравнение результатов действий, выполненных от пользователей \texttt{readonly\_user} и \texttt{edit\_user}.}
|
||||
\addtocounter{table}{-1}
|
||||
\caption{Сравнение результатов действий, выполненных от пользователей \texttt{readonly\_user} и \texttt{edit\_user} (продолжение).}
|
||||
\footnotesize
|
||||
\begin{tabularx}{\textwidth}{|c|X|X|}
|
||||
\hline
|
||||
\textbf{№} & \textbf{readonly\_user} & \textbf{edit\_user} \\
|
||||
\textbf{№} & \textbf{edit\_user} & \textbf{readonly\_user} \\
|
||||
\hline
|
||||
1 & Successfully run. & Successfully run. \\
|
||||
|
||||
\multirow{3}{*}{7} & \multicolumn{2}{c|}{Добавление данных в таблицу \texttt{participant\_request}. }\\
|
||||
% \cline{2-3}
|
||||
& \multicolumn{2}{c|}{\specialcell{\texttt{insert into shot\_series (score, photo, id\_participant\_request,}\\ \texttt{id\_result\_in\_stage, id\_judge\_request)}\\ \texttt{values (10, 'path/to/photo.jpg', 16784, 67368, 3403)}}}\\
|
||||
\cline{2-3}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try7_edit_user.png}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try7_readonly_user.png}
|
||||
\\
|
||||
\hline
|
||||
2 & ОШИБКА: вставить данные в представление "sportsman\_requests\_series\_count" нельзя. & ОШИБКА: вставить данные в представление "sportsman\_requests\_series\_count" нельзя. \\
|
||||
\hline
|
||||
3 & ОШИБКА: нет доступа к таблице judge. & ОШИБКА: нет доступа к таблице judge. \\
|
||||
\hline
|
||||
4 & ОШИБКА: нет доступа к таблице sportsman. & Successfully run. \\
|
||||
\hline
|
||||
5 & ОШИБКА: нет доступа к таблице participant\_request. & Successfully run. \\
|
||||
\hline
|
||||
6 & ОШИБКА: нет доступа к таблице shot\_series. & Successfully run. \\
|
||||
\hline
|
||||
7 & ОШИБКА: нет доступа к таблице judge. & INSERT 0 1 \\
|
||||
\hline
|
||||
8 & ОШИБКА: нет доступа к таблице judge. & ОШИБКА: нет доступа к таблице judge. \\
|
||||
|
||||
\multirow{3}{*}{8} & \multicolumn{2}{c|}{Добавление данных в таблицу, несвязанную с представлением. }\\
|
||||
% \cline{2-3}
|
||||
& \multicolumn{2}{c|}{\specialcell{\texttt{insert into judge (name, category, region, federation)}\\ \texttt{values ('Иван Иванов', '1 категория', 'Санкт-Петербург', 'Федерация')}}}\\
|
||||
\cline{2-3}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try8.png}
|
||||
&
|
||||
\vspace{-11pt}
|
||||
\hspace{-8.5pt}
|
||||
\includegraphics[width=1\linewidth]{img/try8.png}
|
||||
\\
|
||||
\hline
|
||||
|
||||
\end{tabularx}
|
||||
\end{table}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user