Страницы

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

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

среда, 15 апреля 2020 г.

Авторские права.

#права #лицензирование

                    
Если я в части своего проекта использую кусок кода, взятый из свободного доступа
(без указания на него лицензии) то нарушил ли я какие-либо установленные законом рамки? 
Или должен ли я указать в своем проекте автора, чей кусок кода я взял? 
И имеет ли он право требовать с меня обязательного указания своего соавторства (если,
в том месте где я брал код не было явно указано его авторство)? 
Может ли он потребовать убрать не использовать его наработки? 
Как можно доказать свое авторство, на код, свободно размещенный в интернете? 
Если мой код, очень поход на код какого-то разработчика, и он выражает свое недовольство? 
Как быть в этом случае? 
Как понять где начинаются и заканчиваются рамки авторского права, относительно исходного
кода?    


Ответы

Ответ 1



Если код просто выложен на сайт без лицензии, то вы не можете использовать его никак, кроме как просто читать: авторские права остаются за автором кода, и только он может определять, что с его кодом можно делать. Полностью определять. Таким образом, если автор захочет, он может потребовать, чтобы вы указали его соавтором; а может потребовать, чтобы не указывали; также он может запретить использовать свой код (например, сказав, что код выложен только в обучающих целях). Всё в руках автора. Если код выложен без лицензии, это означает, что автор просто не удосужился сообщить свои условия использования кода, а вовсе не то, что код можно использовать на ваше усмотрение. Обратитесь к автору за разъяснением. Существует понятие "общественного достояния" (public domain), что означает, что автор отказывается от своих прав на код, и любой может делать с этим кодом всё, что хочет. Но в таком случае это должно быть явно написано на сайте. Кстати, насколько я знаю, в России нельзя отказаться от авторских прав, то есть нельзя передать своё творение в общественное достояние - оно может стать общественным достоянием только через 70 лет после смерти автора. В любом случае, если лицензия кода не указана, стоит обратиться к автору напрямую, и узнать условия использования его кода. Если ваш проект серьёзный и большой, то эти условия желательно ещё и юридически оформить, чтобы не было проблем в дальнейшем. Насчёт похожих кодов, и "где начинаются и заканчиваются рамки". В некотором роде философский вопрос. Здесь, на мой взгляд, ничего нельзя сказать, кроме следующего циничного высказывания: в суде доказать можно всё, что захочешь, если есть адвокаты и деньги. Некоторые пытаются прочитать закон сотню раз, чтобы понять великую идею, которая была в нём заложена, и затем логически непротиворечиво вывести эти самые рамки. Законодатели пытаются упомянуть в законе все возможные случаи, которые только могут быть (а авторы программ пишут огромные тексты лицензий, где написано всё на все случаи жизни) - и всё равно и те, и другие что-нибудь просмотрят, и получится зацепка, с помощью которой можно будет толковать закон/лицензию неоднозначно. Идеализированные представления об авторском праве, защите интеллектуальной собственности и вообще, о праве, на мой взгляд, не имеют никакой рациональной основы, и противоречат сами себе. (Анархизм, да; и вообще спорный вопрос, поэтому не буду продолжать). Поэтому: не полагайтесь на ваше суждение о вещах, которые автор умолчал - напрямую спросите его об этом; юридически оформляйте всё, что только можно; имейте деньги и адвокатов.

Ответ 2



Ключевые слова: свободный доступ, отсутствие лицензии. Доказать то, что это его код он не сможет ни коим образом. Код у нас пока не патентуется. Но с моей точки зрения, указывать или нет его в авторах это дело вашей совести.

пятница, 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

пятница, 14 февраля 2020 г.

Как группе выдать права доступа к папке в Linux?

#linux #debian #права #chmod


У меня имеются 2 пользователя: usr1 и usr2

Выполняя команду: id usr1
Мы получаем: uid=1(usr1) gid=1(usr1) groups=1(usr1),3(groups_test)

Выполняя команду: id usr2
Мы получаем: uid=2(usr2) gid=2(usr2) groups=2(usr2),3(groups_test)


Видно, что пользователи состоят в одной группе "groups_test". 

Есть папке "Data" владельцем которой является usr1, я поставил данной папке права
"775", владелец может делать все, групповые права доступны все и публичные только на
чтении и выполнение. Почему usr2 не может изменять, переименовывать файлы в папке "Data",
если групповые права доступны все и usr2 находится в одной группе с владельцем файла?
Помогите исправить, уже перерыл кучу мануалов.

UPD:

Выполняя команду: getfacl Data
Мы получаем: 
# file: Data
# owner: usr1
# group: usr1
user::rwx
group::rwx
other::r-x

    


Ответы

Ответ 1



Поменять группу директории нужно: chgrp groups_test Data Изменять чужие файлы usr2 может только если данный файл состоит в группе groups_test. Право записи на директорию позволяет только добавлять файлы и удалять. Чтобы все новые файлы имели автоматически группу groups_test нужно ещё подправить данную папку так: chmod g+s Data

четверг, 13 февраля 2020 г.

Авторское право в программировании (Интеллектуальная собственность)

#права #лицензирование


У меня есть программа , она преследует какую то идею соответственно. Тут какой-то
программист Вася Пупкин из другого конца страны увидел мою программу и сделал тоже
самое (может с какими то улучшениями) назвал её также и распространяет её, и получает
мою славу.

Что кроме "карма" может помешать это сделать? Или может каким-то образом я смогу
уберечь программу (зарегистрировать авторские права)? Или этот вопрос абсурд?

Вообще поясните если я что-то не понимаю. Может оно и правда не надо?
    


Ответы

Ответ 1



Программа есть и всегда была интеллектуальной собственностью. Поэтому только подходя к этому вопросу с данной стороны можно пытаться судиться. Но доказать, что код ваш практически невозможно. Грубо говоря вы даже не имеете права без разрешения автора использовать в своих программах простейшие циклы, которые вы нашли в книге, например: for(int i=0; i

Ответ 2



Если ты придумал что-то новое, то единственный способ защитить права - патент. Причем читал как-то, что коды в России не патентуются. Можно запатентовать новые технологии. А иначе - никак. Хотя я не юрист, может, и не прав. А вообще, нужно больше думать о благе человечества.

Ответ 3



Тогда был бы у нас один гугл, и ни каких яндексов, и тому подобное. И да запатентовать "код" в России никак. да и как бы мы жили с таким - одни монополисты бы были :) здоровая конкуренция всегда хороша)) udp: на счет одинаковых названий не в курсе но, в России например мильон ООО могут иметь одинаковые названия :) а вот каким-нибудь эплом назвать уже нельзя, фактически то можно, но примерно какой-нить магазинчик в деревне)

Почему logrotate ругается на права /var/log/?

#linux #ubuntu #права


Утилита logrotate ругается на то, что у /var/log небезопасные права (permissions):

root@home:~# logrotate /etc/logrotate.d/foo



  error: skipping "/var/log/foo.log" because parent directory has insecure permissions
(It's world writable or writable by group which is not "root") Set "su" directive in
config file to tell logrotate which user/group should be used for rotation.


root@home:/var/log# ls -hal foo.log
-rw-r----- 1 root adm 161K Jan 25 17:16 foo.log

root@home:/var/log# ls -ld
drwxrwxr-x 9 root syslog 4.0K Jan 25 16:26 .


Похоже, права действительно слишком свободные. Вопрос: насколько нужно их ограничить?
Какие права должны быть у этой директории? Нужно ли ограничивать права всех вложенных
директорий?

Было бы здорово получить объяснение, а не только три числа для chmod. :)



По поводу предлагаемого в сообщении решения.

В файле /etc/logrotate.conf уже есть такие строки:

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog


В /etc/logrotate.d/foo директива su не переопределяется. 
    


Ответы

Ответ 1



добавьте в конфигурационный файл /etc/logrotate.conf требующуюся директиву: su root syslog а менять права/принадлежность файлов и каталогов в /var/log обычно не сто́ит. дополнительная информация: https://bugs.launchpad.net/ubuntu/+source/logrotate/+bug/1278193 обновление в связи со всплывшей информацией по поводу команды: $ sudo logrotate /etc/logrotate.d/foo для тестирования изменений, вносимых в конфигурацию, сто́ит запускать программу logrotate с опцией -d (debug, отладка, реальных изменений произведено не будет). в качестве параметра сто́ит указывать конфигурационный файл программы (/etc/logrotate.conf), а не «кусочек» конфигурации из файла, находящегося в каталоге /etc/logrotate.d/. эти «кусочки» и так будут подключены в то место конфигурационного файла, где написана директива include /etc/logrotate.d. ошибка про «неправильные» права при выполении этой команды связана с тем, что по умолчанию программа logrotate использует не ту связку пользователь-группа, которая задана в конфигурационном файле (в дистрибутивах ubuntu последних версий — это root:syslog; директива: su root syslog), а, скорее всего, связку root:root, которая, естественно, не соответствует актуальной принадлежности каталога /var/log. но конфигурационный файл /etc/logrotate.conf не интерпретируется при запуске (указан совсем другой файл — /etc/logrotate.d/foo), вот программа и сообщает об ошибке.

Ответ 2



Необходимо просто снять излишнии права с папки и ругаться перестанет ls -ld drwxr-xr-x 2 root root 4096 Jun 23 08:12 .

среда, 22 января 2020 г.

Как правильно реализовать функциональность “Поделиться” на подобии как в Google Drive?

#веб_программирование #spring #usercontrol #права #acl


Проектирую сайт, в котором каждый зарегистрированный пользователь, может создавать
записи к примеру как в evernote или в том же google диске.

Всего на сайте есть 4 роли (Админ, Модератор, Поддержка, Пользователь), модель для
реализации выбрал RBAC и каждой роли назначены нужные права.



Но вот не знаю существует ли модель или реализация для Spring для внедрения следующего
функционала:

Каждый пользователь может создавать свои группы в которые может добавлять пользователей
(Друзья, Коллеги по работе, Семья, и т.д.) добавлять может только тех пользователей
которые зарегистрированы на сайте.
Примерно так это вижу в БД:

+------------+---------+--------------+
|   users    | groups  | users_groups |
+------------+---------+--------------+
| id         | id      | id           |
| username   | user_id | group_id     |
| passwords  | name    | user_id      |
+------------+---------+--------------+




Теперь о главной задаче
Выдавать права доступа к своей записи другим пользователям: 


Доступ по URL (доступен тем у кого есть ссылка)
Публичный доступ (Доступен всем, также виден в поиске)
Публичний с паролем
Группе пользователей
Конкретному зарегистрированному пользователю


Также к каждому шарингу (доступу) будь то пользователю или группе нужно еще выставлять
права:


Только просмотр
Просмотр и редактирование
Полный ( READ / WRITE / DELETE )




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

Заранее благодарен за любую помощь или подсказку реализации!
    


Ответы

Ответ 1



У вас есть таблица записей items. Добавьте в нее поле access_mode и заполняйте такими значениями NULL: Только указанные люди Доступ по URL Публичный доступ Публичный с паролем И заведите таблицу список доступа acl с полями id item_id group_id is_read is_write is_delete Для добавления конкретного пользователя можно для него создать виртуальную группу или добавить в таблицу acl поле user_id и заполнять или его или поле group_id (по идее с виртуальными группами будет проще реализация) Т.к. у вас есть только разрешительные права и нет запрещающих, то для вычисления конечных прав пользователя на запись достаточно такого запроса SELECT MAX(is_read), MAX(is_write), MAX(is_delete) FROM acl WHERE item_id = :item_id AND EXISTS ( SELECT 1 FROM users_groups ug WHERE ug.user_id = :user_id AND ug.group_id = acl.group_id )

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

Нет права на чтение файла, хотя я состою в группе владельца файла

#linux #права #chmod


Есть например файл 1.png.

Он принадлежит владельцу и группе www-data:www-data.
На файле стоят права -rw-rw----

Как я понимаю, просматривать файл может владелец и все кто состоит в группе владельца,
т.е. в группе www-data.

Мой пользователь andrey. 
Я добавил его в группу www-data командой $ sudo usermod -a -G www-data andrey.
Если просмотреть командой $ groups andrey, то в списке группа www-data есть. 

Но почему-то права на просмотр этого файла всё равно нет. Т.е. я не могу открыть
эту картинку в Ubuntu 16.04 в обычном проводнике. 
Почему так происходит? Или я не правильно понимаю механизм прав доступа? Подскажите
пожалуйста.
    


Ответы

Ответ 1



Чтобы изменения вступили в силу необходимо перелогиниться.

суббота, 21 декабря 2019 г.

Как дать права определенному пользователю на чтение файла?

#linux #файлы #права


Есть два пользователя: user1 и user2. И есть два файла: file1 и file2. Как задать
права, чтобы каждый из этих пользователей мог читать файлы друг друга, сам мог и читать
и запускать и редактировать СВОЙ файл, а остальные пользователи ничего не могли?

P.S. Владельцы файла соответственно user1 и user2.
    


Ответы

Ответ 1



сам мог и читать и запускать и редактировать СВОЙ файл: $ chmod u+rwx свой.файл остальные пользователи ничего не могли $ chmod o= свой.файл предыдущие два пункта можно совместить в одну команду: $ chmod u+rwx,o= свой.файл чтобы каждый из этих пользователей мог читать если файловая система не поддерживает acl, то сначала потребуются полномочия суперпользователя — надо будет создать группу, в которую будут входить (только) эти два пользователя: $ sudo groupadd общая.группа $ sudo usermod -aG общая.группа пользователь1 $ sudo usermod -aG общая.группа пользователь2 и пользователь сможет изменять принадлежность файла группе: $ chown :общая.группа свой.файл затем, чтобы другие члены этой группы могли файл только читать: $ chmod g=r свой.файл если файловая система поддерживает acl, можно воспользоваться программами setfacl/getfacl: посмотреть текущие правила acl: $ getfacl свой.файл # file: свой.файл # owner: пользователь1 # group: группа1 user::rwx group::r-- other::--- дать второму пользователю право чтения: $ setfacl -m u:пользователь2:r свой.файл проверить, что получилось: $ getfacl свой.файл # file: свой.файл # owner: пользователь1 # group: группа1 user::rwx user:пользователь2:r-- group::r-- mask::r-- other::--- дополнительная информация про posix acl

Ответ 2



Читайте встроенную справочную систему: man chmod Этой командой можно выставить право читать ваши файлы для группы пользователей, соответственно читаем встроенную справку: man chgrp и создаем группу с именем что то типа read_file1_and_file2 (man addgroup), заводим туда этих двух пользователей и выставляем в правах доступа к вашим файлам как: чтение для группы read_file1_and_file2

суббота, 14 декабря 2019 г.

Сохранение файла от имени пользователя C#

#c_sharp #файлы #права


Вопрос:
Можно ли сохранить файл в сетевую директорию используя учетную запись другого пользователя?

Подробности:
Есть служба, работающая под учетно записью System.
Служба, кроме прочего, занимается синхронизацией со сторонним сервисом из которого
нужно выкачивать файлы и складывать в сетевую папку.
Но у System нет прав доступа к сетевой папке.
Зато служба знает логин/пароль пользователя, у которого такие права есть.

(Пока видится только сохранение файла в temp и запуск копирования через Process.Start,
но может быть есть что-то более элегантное?)
    


Ответы

Ответ 1



Вы можете выполнить код внутри своего процесса от другого пользователя. Сначала импортируем WinAPI функцию LogonUser: [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern bool LogonUser( string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken); А дальше вот так: IntPtr token; if (LogonUser("SomeUser", "SomeDomain", "SomePwd", 2, 0, out token)) { var identity = new WindowsIdentity(token); using (identity.Impersonate()) { // здесь вы можете убедиться, что код выполняется под другим юзером Console.WriteLine(Environment.UserName); // делаем что-то File.WriteAllText(@"path.txt", "hello!"); } } else { Console.WriteLine("Invalid credentials"); }

воскресенье, 7 июля 2019 г.

Безопасность директории и публичные права на запись и выполнение

JavaScript-файл методом post отсылает в handler_dir/handler.php строку base64-представление бинарного файла с изображением. Обработчик handler.php получает base64-строку, записывает её в созданный им файл и копирует этот файл во временную директорию:
$str = $_POST['base64']; $img = "some_name.jpg"; file_put_contents($img, base64_decode($str)); rename($img, $temp_dir . $img);
Методом проб выяснилось, что это решение работает только в том случае, когда для директории обработчика handler_dir выставлены публичные права на запись и выполнение
Насколько я понимаю, это очень и очень небезопасно (несмотря на то, что в самом файле handler.php происходит проверка авторизации, а в директорию handler_dir запрещен доступ на уровне .htaccess).
Прошу совета, правильно ли я понимаю, что существующее решение уязвимо в плане безопасности? Существуют ли способы исключить (на любом уровне) загрузку и выполнение вредоносного кода в директории handler_dir?


Ответ

Как только вы открываете пользователям возможность загружать на сайт какие-то файлы — вы сразу самолично создаёте огромную дыру в безопасности сайта. Это ещё один дополнительный вектор атаки на сайт.
Да, хороший разработчик тут же начинает закрывать эту дыру какими-то действиями, многие из них будут весьма действенными — но до конца закрыть её будет можно лишь теоретически — отняв саму возможность загружать.
Чем плохо ваше решение? Тем, что загрузчик лежит в том же самом каталоге, что и загружаемые файлы. Зачем? Современные практики вообще доходят до того, что на сайте остаётся лишь один index.php, а остальной движок лежит выше уровня www_root. Вам нужно создать отдельную папку upload только под загруженные файлы. Отделяйте код от контента — это хорошо как с точки зрения хороших практик программирования, так и помогает с точки зрения безопасности.
Непонятно, почему вы пишете, что "решение работает только в том случае, когда для директории обработчика handler_dir выставлены публичные права на запись и выполнение". Вполне достаточно, чтобы PHP-скрипты имели owner'ом пользователя apache (ну или от кого у вас запускается веб-сервер?) и имели права 0644 (и, при условии включенного SELinux достаточно иметь контекст httpd_sys_content_t).
А вот на папку upload, куда вы хотите сохранять картинки, нужно, чтобы owner был apache, права на каталог 0755 и SELinux контекст httpd_sys_rw_content_t.
Что можно порекомендовать на практике для улучшения безопасности?
В этой статье собраны хорошие практики, посмотрите весь чеклист из рекомендованного вопроса PHP image upload security check list
Раз вы загружаете картинки — обратите внимание вот на какой способ защиты. Возьмите и сожмите картинку при помощи GD или ImageMagic на 99% — визуально картинка останется такой же (ну, если это не совсем крохотная картинка, а достаточно крупная), а зловредный код такую трансформацию не переживёт, как бы он не был представлен (приклеен после картинки или внедрён в неё).
Подскажите, где можно прочитать об изменении уровня относительно www_root?
Видимо что-то типа "Вынесение за пределы корня сайта"? А, вот ещё: "единая точка входа", сегодня попалось в вопросе. Самое краткое описание это "В идеале, чтобы система была спроектирована так, что в public_html будет лежать только index.php, внутри которого единственное подключение файлика, не лежащего в public_html", в качестве примера движка - посмотрите Laravel

суббота, 6 июля 2019 г.

Авторские права.

Если я в части своего проекта использую кусок кода, взятый из свободного доступа (без указания на него лицензии) то нарушил ли я какие-либо установленные законом рамки? Или должен ли я указать в своем проекте автора, чей кусок кода я взял? И имеет ли он право требовать с меня обязательного указания своего соавторства (если, в том месте где я брал код не было явно указано его авторство)? Может ли он потребовать убрать не использовать его наработки? Как можно доказать свое авторство, на код, свободно размещенный в интернете? Если мой код, очень поход на код какого-то разработчика, и он выражает свое недовольство? Как быть в этом случае? Как понять где начинаются и заканчиваются рамки авторского права, относительно исходного кода?


Ответ

Если код просто выложен на сайт без лицензии, то вы не можете использовать его никак, кроме как просто читать: авторские права остаются за автором кода, и только он может определять, что с его кодом можно делать. Полностью определять. Таким образом, если автор захочет, он может потребовать, чтобы вы указали его соавтором; а может потребовать, чтобы не указывали; также он может запретить использовать свой код (например, сказав, что код выложен только в обучающих целях). Всё в руках автора. Если код выложен без лицензии, это означает, что автор просто не удосужился сообщить свои условия использования кода, а вовсе не то, что код можно использовать на ваше усмотрение. Обратитесь к автору за разъяснением. Существует понятие "общественного достояния" (public domain), что означает, что автор отказывается от своих прав на код, и любой может делать с этим кодом всё, что хочет. Но в таком случае это должно быть явно написано на сайте. Кстати, насколько я знаю, в России нельзя отказаться от авторских прав, то есть нельзя передать своё творение в общественное достояние - оно может стать общественным достоянием только через 70 лет после смерти автора. В любом случае, если лицензия кода не указана, стоит обратиться к автору напрямую, и узнать условия использования его кода. Если ваш проект серьёзный и большой, то эти условия желательно ещё и юридически оформить, чтобы не было проблем в дальнейшем. Насчёт похожих кодов, и "где начинаются и заканчиваются рамки". В некотором роде философский вопрос. Здесь, на мой взгляд, ничего нельзя сказать, кроме следующего циничного высказывания: в суде доказать можно всё, что захочешь, если есть адвокаты и деньги. Некоторые пытаются прочитать закон сотню раз, чтобы понять великую идею, которая была в нём заложена, и затем логически непротиворечиво вывести эти самые рамки. Законодатели пытаются упомянуть в законе все возможные случаи, которые только могут быть (а авторы программ пишут огромные тексты лицензий, где написано всё на все случаи жизни) - и всё равно и те, и другие что-нибудь просмотрят, и получится зацепка, с помощью которой можно будет толковать закон/лицензию неоднозначно. Идеализированные представления об авторском праве, защите интеллектуальной собственности и вообще, о праве, на мой взгляд, не имеют никакой рациональной основы, и противоречат сами себе. (Анархизм, да; и вообще спорный вопрос, поэтому не буду продолжать). Поэтому: не полагайтесь на ваше суждение о вещах, которые автор умолчал - напрямую спросите его об этом; юридически оформляйте всё, что только можно; имейте деньги и адвокатов.

суббота, 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

четверг, 21 марта 2019 г.

Как сделать автоматическое монтирование расшаренной по сети папки с полными правами на изменение?

Сейчас в /etc/fstab прописано: //192.168.19.90/ExampleFolder /mnt/exampleFolder cifs auto,user,iocharset=utf8,uid=1000,umask=000,username=john,password=pa$s 0 0 В итоге получается: root@ubuntusrv:/mnt# ls -la drwxr-xr-x 1 root root 12599296 2012-12-06 13:35 exampleFolder А надо чтобы было drwxrwxrwx. Как изменить?


Ответ

Если я все правильно понимаю, то достаточно на удаленной и на локальной машине сделать: chmod 777 exampleFolder

понедельник, 28 января 2019 г.

Нет права на чтение файла, хотя я состою в группе владельца файла

Есть например файл 1.png.
Он принадлежит владельцу и группе www-data:www-data. На файле стоят права -rw-rw----
Как я понимаю, просматривать файл может владелец и все кто состоит в группе владельца, т.е. в группе www-data
Мой пользователь andrey. Я добавил его в группу www-data командой $ sudo usermod -a -G www-data andrey. Если просмотреть командой $ groups andrey, то в списке группа www-data есть.
Но почему-то права на просмотр этого файла всё равно нет. Т.е. я не могу открыть эту картинку в Ubuntu 16.04 в обычном проводнике. Почему так происходит? Или я не правильно понимаю механизм прав доступа? Подскажите пожалуйста.


Ответ

Чтобы изменения вступили в силу необходимо перелогиниться.

понедельник, 22 октября 2018 г.

Сохранение файла от имени пользователя C#

Вопрос: Можно ли сохранить файл в сетевую директорию используя учетную запись другого пользователя?
Подробности: Есть служба, работающая под учетно записью System. Служба, кроме прочего, занимается синхронизацией со сторонним сервисом из которого нужно выкачивать файлы и складывать в сетевую папку. Но у System нет прав доступа к сетевой папке. Зато служба знает логин/пароль пользователя, у которого такие права есть.
(Пока видится только сохранение файла в temp и запуск копирования через Process.Start, но может быть есть что-то более элегантное?)


Ответ

Вы можете выполнить код внутри своего процесса от другого пользователя. Сначала импортируем WinAPI функцию LogonUser
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern bool LogonUser( string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
А дальше вот так:
IntPtr token; if (LogonUser("SomeUser", "SomeDomain", "SomePwd", 2, 0, out token)) { var identity = new WindowsIdentity(token); using (identity.Impersonate()) { // здесь вы можете убедиться, что код выполняется под другим юзером Console.WriteLine(Environment.UserName); // делаем что-то File.WriteAllText(@"path.txt", "hello!"); } } else { Console.WriteLine("Invalid credentials"); }