Страницы

Поиск по вопросам

Показаны сообщения с ярлыком доступ. Показать все сообщения
Показаны сообщения с ярлыком доступ. Показать все сообщения

пятница, 13 марта 2020 г.

MSSQL. Создание группы с определенными правами

#sql_server #права #доступ


Необходимо дать права только на выполнение данной команды:

INSERT INTO table
SELECT *
FROM OPENROWSET(
    'MSDASQL',
    'Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};DBQ=shara',
    'SELECT * FROM table2');


Т.е. что бы члены группы имели доступ только table, могли выполнять команду OPENROWSET
- не больше и не меньше.

Не подскажете как дать права правильно или где почитать? 

Заранее спасибо за Ваши ответы. 
    


Ответы

Ответ 1



Может быть вам подойдёт такой вариант. Заворачиваем команду в хранимую процедуру: create procedure [dbo].[ImportProc] with execute as 'UserName' -- тот у кого есть права на table и OPENROWSET as begin set nocount on; INSERT INTO [table] SELECT * FROM OPENROWSET(...); end далее создать роль, дать ей права на выполнение процедуры и добавить нужных пользователей в роль: USE [DBName] GO CREATE ROLE [data_import] GO GRANT EXECUTE ON [dbo].[ImportProc] TO [data_import] GO ALTER ROLE [data_import] ADD MEMBER [DataImporterUserName] GO Если нет, то для использования OPENROWSET нужно давать разрешение уровня сервера ADMINISTER BULK OPERATIONS соответствующему логину: USE [master] GO GRANT ADMINISTER BULK OPERATIONS TO [LoginName] GO Плюс в базе нужно отдельно разрешить вставку в таблицу: USE [DBName] GO GRANT INSERT ON [dbo].[table] TO [RoleName] GO

суббота, 4 января 2020 г.

Ограничение доступа для пользователя

#linux #доступ


Дистрибутив Debian GNU/Linux.

Как ограничить пользователю доступ ко всему, кроме выполнения одного файла?
Ну, и соответственно, этот пользователь должен мочь проверить, запущен ли этот файл,
и если нет, то запустить.
    


Ответы

Ответ 1



«искоробочного» средства, насколько мне известно, нет. если используется аутентификация по ключу, то можно в файле ~/.authorized_keys перед ключом пользователя добавить параметр command=/путь/к/вашему/скрипту (подробности смотрите в man sshd, секция «authorized_keys file format»). а в /путь/к/вашему/скрипту (файл должен иметь бит исполнимости, разумеется) написать обработчик примерно такого вида: #!/bin/sh case "$SSH_ORIGINAL_COMMAND" in start) # здесь код запуска того, что вам нужно ;; stop) # здесь код остановки того, что вам нужно ;; status) # здесь код, проверяющий статус того, что вам нужно, # и выводящий информацию в stdout. эту информацию увидит пользователь ;; *) # неизвестная команда. возвращаем пользователю сообщение об ошибке echo "unknown command" ;; esac когда пользователь выполнит команду ssh имя@хост start, то будет выполнен этот ваш скрипт, а строка start будет передана скрипту в переменной окружения SSH_ORIGINAL_COMMAND. строки start/stop/status использованы лишь для иллюстрации. вы можете использовать что угодно иное.

Ответ 2



Что бы вводить такие серьезные разграничения нужно как минимум познакомится с selinux. С его помощью можно прописывать любые роли но тема надо признать довольно сложная для отдельно взятого случая

Ответ 3



добавка к ответу alexander barakin (я новое узнал). все ниже изложенное я использовал в своей практике. излагаю кратко, основные моменты. доступ по ssh (файл /etc/ssh/sshd_config): параметр AllowUsers username1, username2 разрешит подключение по ssh только пользователям username1, username2 ограничение полномочий в системе (файл /etc/sudoers. т.е. когда пользователь username1 или username2 уже залогинен в системе по ssh): синтаксис: [пользователь] [хост]=([кем может стать]) [что может сделать] username1 ALL=(root) /usr/bin/scp username2 ALL=(root) /sbin/reboot %users ALL=(root) NOPASSWD:/sbin/poweroff результат: пользователь username1 сможет использовать scp (скопировать файл <имя файла> на комп host2 через ssh используя пароль своей учетной записи на компе host2 в каталог /home/username1. ключ -P это номер порта, используемого ssh на компе host2 (по дефолту номер порта 22). ключ -v чтобы был виден процесс копирования. scp выполняется с повышенными привилегиями). sudo scp -v -P 222 <имя файла> username1@host2:/home/username1 пользователь username2 сможет использовать reboot используя пароль своей учетной записи: sudo reboot пользователи группы users смогут использовать poweroff без ввода паролей: sudo poweroff дальше дело за вами: для кого и что разрешить/запретить/ограничить.

воскресенье, 8 декабря 2019 г.

Как запретить изменение переменной?

#java #классы #переменные #доступ #константа


Как сделать, чтобы переменную можно было изменять только из текущего класса и при
обращении из других классов она была, грубо говоря, как "константа", то есть с доступом
только на чтение?
    


Ответы

Ответ 1



Не припомню таких спецификаторов в языке Java. Но можно сделать, например, private поле с public getter() и НЕ public setter().

Ответ 2



Если нужен доступ в режиме readonly, то можно написать примерно так: public class Foo { private int bar; public int getBar() { return bar; } }

суббота, 1 июня 2019 г.

MSSQL. Создание группы с определенными правами

Необходимо дать права только на выполнение данной команды:
INSERT INTO table SELECT * FROM OPENROWSET( 'MSDASQL', 'Driver={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};DBQ=shara', 'SELECT * FROM table2');
Т.е. что бы члены группы имели доступ только table, могли выполнять команду OPENROWSET - не больше и не меньше.
Не подскажете как дать права правильно или где почитать?
Заранее спасибо за Ваши ответы.


Ответ

Может быть вам подойдёт такой вариант. Заворачиваем команду в хранимую процедуру:
create procedure [dbo].[ImportProc] with execute as 'UserName' -- тот у кого есть права на table и OPENROWSET as begin set nocount on;
INSERT INTO [table] SELECT * FROM OPENROWSET(...); end
далее создать роль, дать ей права на выполнение процедуры и добавить нужных пользователей в роль:
USE [DBName] GO CREATE ROLE [data_import] GO GRANT EXECUTE ON [dbo].[ImportProc] TO [data_import] GO ALTER ROLE [data_import] ADD MEMBER [DataImporterUserName] GO
Если нет, то для использования OPENROWSET нужно давать разрешение уровня сервера ADMINISTER BULK OPERATIONS соответствующему логину:
USE [master] GO GRANT ADMINISTER BULK OPERATIONS TO [LoginName] GO
Плюс в базе нужно отдельно разрешить вставку в таблицу:
USE [DBName] GO GRANT INSERT ON [dbo].[table] TO [RoleName] GO