«Управление доступом к данным в PosgreSQL» и «1c v8 hasp»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Vix
(Новая страница: «'''Условные обозначения, используемые при описания синтаксиса команд:''' ТЕКСТ ПРОПИСНЫМ…»)
 
imported>Vix
 
Строка 1: Строка 1:
'''Условные обозначения, используемые при описания синтаксиса команд:'''
==HASP для 1С v8 ==
<hr>
Внимание! статья написана для экстренных случаев решения проблемы и не является руководством к взлому!<br>
использование данной статьи не имея реального ключа - несет реальную ответственность по УК РФ.
<hr>


ТЕКСТ ПРОПИСНЫМИ БУКВАМИ - зарезервированные слова.
Backend.dll для 1cv8


Тексткурсивом и строчными буквами - элементы, определяемые пользователем.
После установки 1С v8.xx на терминальный сервер 1С ругается на отсутствие ключа.
Чтобы не было ругани, патчим следующим образом:


[текст в квадратных скобках] - необязательный элемент.
Для версий ниже 8.2.12.xx изменяем файл C:\Program Files\1cv8x\bin\backend.dll.


{текст в фигурных скобках} - элемент повторяющийся неопределенное количество раз, включая нулевое.
Для версий выше 8.2.12.xx изменяем файл C:\Program Files\1cv8x\bin\backbas.dll.


| - это разделитель «или» для выбора одного из нескольких элементов.
1. С помощью HEX редактора находим строчку:
10 00 00 FF D0 85 C0 0F 82 08 F8 FE FF 0F 84 16
2. Заменяем ее на:
10 00 00 FF D0 31 C0 0F 82 08 F8 FE FF 0F 84 16
(т.е. только один байтик с 85 на 31)




== Введение ==
или создаем скрипт patch.vbs:
Управление доступом к данным в сервере PostgreSQL осуществляется с помощью нескольких механизмов. Таких как:
Конфигурационные файлы: postgresql.conf и pghba.conf.


С помощью этих файлов настраивается подключение к серверу Postgres.
File="backbas.dll"<br /> arr =split("10 00 00 FF D0 85 C0 0F 82 08 F8 FE FF 0F 84 16"," ")
arr2=split("10 00 00 FF D0 31 C0 0F 82 08 F8 FE FF 0F 84 16"," ")
for each c in arr
r=r & chrb(clng("&H" & c))
next
for each c in arr2
r2=r2 & chrb(clng("&H" & c))
next
set s=createobject("ADODB.Stream")
s.type=2
s.open
s.loadfromfile(File)
ss=s.readtext
s.position=0
s.writetext(replace(ss,r,r2))
s.position=0
s.type=1
s.position=2
ss=s.read
s.close
s.open
s.write(ss)
call s.savetofile(File,2)
'WScript.Echo "Patched succesfully"


Управление пользователями и группами - регистрация пользователей и групп, определения права суперпользователя, права создания баз данных, права создания ролей, права наследования родительских прав для пользователей или групп.


Определение прав доступа к объектам баз данных для пользователей или групп с помощью SQL команд GRANT и REVOKE.
Если подключаемся через веб-интерфейс и 1С пишет: "Не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!"


Решение найдено: Для веб-клиентов лицензии выдает сервер 1С предприятия. Нужно зайти в консоль Администрирование серверов 1С,<br\> открыть свойства базы, установить "ДА" в поле "Разрешить выдачу лицензий сервером 1С:Предприятия"


[http://iamsan.ru/windows/1cv8-backend-dll статья]


== Конфигурационный файл pghba.conf ==
* [http://melfis.ru/ключи-защиты--не-обнаружена-лицензия/ полезное]
 
В конфигурационном файле сервера pghba.conf устанавливается доступ на уровне хоста. Этим файлом определяются все возможные подключения к серверу. А именно, какие пользователи, с каких компьютеров и к каким базам имеют доступ. Так же определяется каким образом осуществляется обмен данными для каждого подключения: используются ли пароли, используется ли шифрование данных.
 
Синтаксис файла pghba.config должен удовлетворять ряду правил. В каждой строке файла находится одна хостовая запись. Перенос записи на другую строку не разрешается. Каждая запись состоит из нескольких полей, разделенных пробелами или знаками табуляции. Количество полей определяется типом хостовой записи и способом задания адреса. Тип хостовой записи определяется первым ключевым словом и может быть 4 видов. Коментарии должны начинаться с символа #.
 
'''Формат строки файла pg_hba:'''
 
local database user auth-method [auth-option]
host database user CIDR-address auth-method [auth-option]
hostssl database user CIDR-address auth-method [auth-option]
hostnossl database user CIDR-address auth-method [auth-option]
host database user IP-address IP-mask auth-method [auth-option]
hostssl database user IP-address IP-mask auth-method [auth-option]
hostnossl database user IP-address IP-mask auth-method [auth-option]
 
 
'''1. Первое ключевое слово определяет тип подключения и соответственно тип хостовой записи:'''
 
'''local''' - для клиентских подключений с того же компьютера, на котором работает сервер
 
'''host''' - сетевое подключение
 
'''hostssl''' - для подключений локальных или удаленных хостов к серверу, с использованием ssl протокола, обеспечивающим шифрование всех взаимодействий с сервером.
 
Протокол ssl должен поддерживаться как клиентом, так и сервером.
 
'''2. Второй параметр database обозначает базы данных, к которым можно подключаться:'''
 
'''all''' - для разрешения подключения ко всем базам данных.
 
'''sameuser''' - для разрешения подключения только к базе данных имя которой совпадает с именем пользователя.
 
Имя базы данных или список баз данных, разделенный запятыми - для разрешения подключения к конкретной базе данных.
 
'''user''' - имена пользователей или групп, которым разрешается подключение с этого компьютера:
 
'''all''' - все пользователи
 
имя пользователя - имя конкретного пользователя +имя группы - имя группы
 
список пользователей и групп, разделенный запятыми
 
'''3. CIDR-address или IP адрес и IP маска - адрес хоста.'''
 
'''4. Тип аутентификации:'''
*trust
*reject
*md5
*crypt
*password
*krb5
*ident
*idap
*pam
 
'''6. Опции, в зависимости от типа аутентификации.'''
 
Подробнее можно почитать в самом файле pg_hba или в документации к postgres [1] в разделе Server administration - Client authentication
Пример:  
host all «postgres» 127.0.0.1/32 md5
Данная запись разрешает подключение пользователю postgres ко всем базам данных, причем пользователь postgres может подключаться только с локального адреса (127.0.0.1). Метод md5 означает, что обязательно использование пароля при установлении подключения. Тоже самое можно было бы задать и с помощью такой строки в pg_hba.config: local all «postgres» md5
 
 
 
== Регистрация пользователя на сервере ==
 
Подключиться к серверу может только пользователь, имеющий учетную запись на сервере. Учетная запись на сервере создается в результате создания пользователя. В процессе аутентификации сервер postgres проверяет был ли зарегистрирован пользователь на сервере и правильно ли введен пароль.
'''Для регистрации пользователя используется команда CREATE USER''' [1]. Синтаксис команды
CREATE USER: CREATE USER name [[WITH] option [...]]
где option может быть:
 
SUPERUSER
| NOSUPERUSER
| CREATEDB
| NOCREATEDB
| CREATEROLE
| NOCREATEROLE
| CREATEUSER
| NOCREATEUSER
| INHERIT
| NOINHERIT
| LOGIN
| NOLOGIN
| CONNECTION LIMIT connlimit  [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE rolename [, ...]
| IN GROUP rolename [, ...]
| ROLE rolename [, ...]
| ADMIN rolename [, ...]
| USER rolename [, ...]
| SYSID uid
 
Так же пользователь может быть создан с использованием сценария createuser [2]. Для этого нужно в командной строке запустить файл createuser.exe. Этот файл находится в директории Program
 
FilesPostgreSQL8.2bin. Команда createuser выполняется с аргументами. Если аргументы не заданы первоначально, то они будут запрошены самой командой в процессе выполнения.
 
Пользователи и группы существуют как глобальные объекты баз данных, а это значит, что они не связаны с какой-то конкретной базой данных [2].
 
Учетные записи пользователей определяют кому разрешено выполнение определенных действий в системе (а так же каких именно действий).
 
Группы существуют как вспомогательное средство, упрощающее представление этих прав.
 
Каждому пользователю postgres создается внутренний системный идентификатор sysid и пароль. Пароль не всегда обязателен - это настраивается в конфигурационном файле pg_hba.conf. Системный идентификатор связывает объекты базы данных с владельцем.
 
'''Владелец''' - это пользователь, которому разрешено предоставлять и отзывать права доступа к объекту.
При создании учетной записи пользователю предоставляются глобальные права - права на создание баз данных, права на создание других пользователей или права суперпользователя.
 
'''Суперпользователь''' - это пользователь, обладающий всеми правами во всех базах данных, включая право создания других пользователей. Глобальные права могут быть в любой момент изменены текущим суперпользователем.
 
В Postgres по умолчанию создается один суперпользователь postgres. Все остальные пользователи создаются этим пользователем или другими пользователями, созданными позже.
 
Вся информация о пользователях, включая пароли, находится в системной таблице pg_shadow. Выборку из этой таблицы может делать только супер пользователь.
 
Для обычных пользователей информация об учетных записях (без паролей) хранится в таблице pg_user.
 
Суперпользователь может удалить из системы любого пользователя, за исключением тех случаев, когда пользователь явно указан, как владелец какого-либо объекта базы данных или когда его имя указано при назначении привилегией для какого-либо объекта.
 
Группы (роли) упрощают процедуру назначения прав пользователям. Так как достаточно дать необходимые права группе, а затем просто добавлять в нее пользователей.
 
Не допускается совпадение имен пользователей и групп (ролей).
 
Группу может создать пользователь у которого есть права на создание ролей (CREATEROLE).
 
Пользователь не может создать группу или пользователя, обладающими большими правами, чем он сам.
 
'''Для создания группы используется команда CREATE ROLE.''' Синтаксис команды:
CREATE ROLE name [ [ WITH ] option [ ... ] ]
где option может быть:
SUPERUSER
| NOSUPERUSER
| CREATEDB
| NOCREATEDB
| CREATEROLE
| NOCREATEROLE
| CREATEUSER
| NOCREATEUSER
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| CONNECTION LIMIT connlimit
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
| VALID UNTIL 'timestamp'
| IN ROLE rolename [, ...]
| IN GROUP rolename [, ...]
| ROLE rolename [, ...]
| ADMIN rolename [, ...]
| USER rolename [, ...]
| SYSID uid
 
'''Для добавления пользователя в группу используется команда ALTER GROUP.''' Синтаксис команды:
ALTER GROUP groupname ADD USER username [, ... ]
'''Для удаления пользователя из группы:'''
ALTER GROUP groupname DROP USER username [, ... ]
'''Для переименования группы:'''
ALTER GROUP groupname RENAME TO newname
 
 
 
== Предоставление привилегий ==
 
Хотя к базе данных может подключиться любой пользователь, зарегистрированный на сервере, при наличии соответствующих настроек в pg_hba.conf, для получения доступа к объектам базы данных необходимо обладать специальными привилегиями к этим объектам.
 
В postgres учет привилегий ведется при помощи списков управления доступом (ACL - Access Control List).
 
Информация, хранящаяся в списках, указывает каким пользователям разрешена выборка, обновления и другие способы модификации какого-либо объекта базы данных.
 
Таким образом для каждого объекта существует набор привилегий и ограничений доступа.
 
По умолчанию пользователь не имеет доступа к объектам, если они ему не принадлежат и если он не является суперпользователем.
 
Команда для установки привилегий - GRANT.
 
Команда для установки ограничений - REVOKE.
 
'''Привилегии для объектов:'''
*SELECT - выборка данных
*INSERT - добавление, удаление данных
*UPDATE - модификация объекта
*DELETE - удаление объекта
*REFERENCES - ссылка на таблицу
*TRIGGER - создание триггеров
*ALL - включает в себя все выше перечисленные
*WITH GRANT OPTION - опция, позволяющая пользователю наделять других пользователей привилегиями к этому объекту, но не более тех, которыми он обладает сам.
 
Привилегии для объектов устанавливают или изменяют суперпользователи, владельцы объектов или пользователи, которым выданы привилегии к объекту с опцией WITH GRANT OPTION.
 
Команда GRANT имеет 2 базовых варианта:
*привилегии на объекты базы данных (таблицы, представления, последовательности, базу данных, функции, процедурные языки, схему, tablespace).
-привилегии на членство в группе (роли) - в этом варианте команда перенаправляет привилегии роли тому пользователю или группе, которые указаны в команде. Наделение такой привилегией аналогично добавлению пользователя или группы в группу.
 
'''Синтаксис команды GRANT для таблиц и представлений:'''
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Команда REVOKE предназначена для отзыва привилегий, выданных ранее.
 
'''Синтаксис команды REVOKE для таблиц и представлений:'''
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] tablename [, ...] FROM { username | GROUP groupname | PUBLIC } [,...] [ CASCADE | RESTRICT ]
 
Отзыв привилегий для PUBLIC влияет только на группу PUBLIC. Привилегии, выданные персонально (с указанием конкретных имен пользователей или групп) в этом случае остаются.
 
Сводка прав ACL просматривается в psql с помощью команды z. Для того, чтобы посмотреть сводку прав по какому-то конкретному объекту нужно указать его имя после команды z. Например:
сервер: ps-345=> пользователь: z fio
сервер: Привилегии доступа для базы данных «ps-3 4 5» сервер: Схема | Имя | Тип | Привилегии доступа
сервер: Public | fio | таблица | сервер: (1 запись)
 
Всех пользователей и группы можно посмотреть с помощью команды du
 
 
== Про владельцев объектов ==
 
Владельцем объектов может быть пользователь или группа.
 
У каждого объекта базы данных может быть владелец, отличный от владельца базы данных.
 
Владельца объекта можно изменить после создания объекта. Это может сделать либо владелец объекта, либо суперпользователь.
 
Если у базы данных - один владелец, а у некоторого объекта этой базы данных другой, то владельца на этом объекте может сменить, только владелец объекта или суперпользователь и не может - владелец базы данных.
 
Владелец может раздавать привилегии на свой объект и изменять его.

Версия от 00:59, 11 января 2014

HASP для 1С v8


Внимание! статья написана для экстренных случаев решения проблемы и не является руководством к взлому!
использование данной статьи не имея реального ключа - несет реальную ответственность по УК РФ.


Backend.dll для 1cv8

После установки 1С v8.xx на терминальный сервер 1С ругается на отсутствие ключа. Чтобы не было ругани, патчим следующим образом:

Для версий ниже 8.2.12.xx изменяем файл C:\Program Files\1cv8x\bin\backend.dll.

Для версий выше 8.2.12.xx изменяем файл C:\Program Files\1cv8x\bin\backbas.dll.

1. С помощью HEX редактора находим строчку:

10 00 00 FF D0 85 C0 0F 82 08 F8 FE FF 0F 84 16

2. Заменяем ее на:

10 00 00 FF D0 31 C0 0F 82 08 F8 FE FF 0F 84 16

(т.е. только один байтик с 85 на 31)


или создаем скрипт patch.vbs:

File="backbas.dll"
arr =split("10 00 00 FF D0 85 C0 0F 82 08 F8 FE FF 0F 84 16"," ") arr2=split("10 00 00 FF D0 31 C0 0F 82 08 F8 FE FF 0F 84 16"," ") for each c in arr r=r & chrb(clng("&H" & c)) next for each c in arr2 r2=r2 & chrb(clng("&H" & c)) next set s=createobject("ADODB.Stream") s.type=2 s.open s.loadfromfile(File) ss=s.readtext s.position=0 s.writetext(replace(ss,r,r2)) s.position=0 s.type=1 s.position=2 ss=s.read s.close s.open s.write(ss) call s.savetofile(File,2) 'WScript.Echo "Patched succesfully"


Если подключаемся через веб-интерфейс и 1С пишет: "Не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!"

Решение найдено: Для веб-клиентов лицензии выдает сервер 1С предприятия. Нужно зайти в консоль Администрирование серверов 1С,<br\> открыть свойства базы, установить "ДА" в поле "Разрешить выдачу лицензий сервером 1С:Предприятия"

статья