Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Приветствую народ! Похоже на этом форуме сидит немало прогеров, раз выскакивают темы про их заработок 100500 баксов/наносек.

 

В общем такой вопрос, как правильно организовать подключение БД к клиенту на C#? Хотя ЯП не важно, нужна сама концепция.

 

Суть вопроса - мне нужна аунтефикация к БД с разными пользвателями и разным уровнем доступа у этих самых пользователей, как это реализовать? Есть идея создать в бд 2 основных таблицы:

  1.  Таблицу roles (id, и название роли).
  2. Таблицу users (id, id_roles, login, password).

Где в таблице roles содержатся собственно роли на уровне БД, где будут созданы политики для доступа к таблицам для этих ролей. И собственно в самом клиенте определять какой пользователь подключается и через клиент выполнять sql запроса "set role" для изменения текущей роли в подлючении. 

 

Правильно ли так делать или можно по другому, более по умному/простому?

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

Ну по разному можно.

Твой вариант говно, подумай сам почему.

Вариант по-лучше(тоже сам подумай почему этот лучше):

users(id, login, pass), roles(id, name), user_roles(role_id, user_id)

ну или 

users(id, login, pass)

user_roles(role_name, user_id). Этот лучше если у тебя не много разных ролей(2-3 роли).

 

ну а вопрос с аутентификацией и прочим нужно решать на уровне фреймворка, которым ты будешь пользоваться, ну или сам пиши секурити костыли)

 

 

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

iJustS сказал(а):

Ну по разному можно.

Твой вариант говно, подумай сам почему.

Вариант по-лучше(тоже сам подумай почему этот лучше):

users(id, login, pass), roles(name), user_roles(role_id, user_id)

 

ну а вопрос с аутентификацией и прочим нужно решать на уровне фреймворка, которым ты будешь пользоваться, ну или сам пиши секурити костыли)

Нажмите, чтобы раскрыть...

Твой вариант явно лучше, вроде как 3 нормальная форма.

 

В самом клиенте выводить только определенную информацию для пользователей через определенные запросы select и не заморачиваться уже с ролями и политиками?

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

l293l сказал(а):

Твой вариант явно лучше, вроде как 3 нормальная форма.

 

В самом клиенте выводить только определенную информацию для пользователей через определенные запросы select и не заморачиваться уже с ролями и политиками?

Нажмите, чтобы раскрыть...

Каком клиенте? Что у тебя в системе клиент?

Не очень понял вопрос.

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

iJustS сказал(а):

Каком клиенте? Что у тебя в системе клиент?

Не очень понял вопрос.

Нажмите, чтобы раскрыть...

Клиент - приложение, если грубо выражаться. Просто оболочка на C#.

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

l293l сказал(а):

Клиент - приложение, если грубо выражаться. Просто оболочка на C#.

Нажмите, чтобы раскрыть...

Ты называешь клиентом серверную часть? xD

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

iJustS сказал(а):

Ты называешь клиентом серверную часть? xD

Нажмите, чтобы раскрыть...

клиент БД находится на сервере

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Ritsuko сказал(а):

сохраняешь в jwt токенах инфу об логине/id юзера и его роли, пишешь мидлвэйры аутентификации к каждой роли, проверяя есть ли в заголовках запроса токен, если есть то проверяешь наличие роли, есть есть то идешь уже непосредственно с мидлвэйра к контроллеру.

 

 

клиент БД находится на сервере

Нажмите, чтобы раскрыть...

Спасибо, конечно, но звучит пока сложно для меня.

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

Ritsuko сказал(а):

сохраняешь в jwt токенах инфу об логине/id юзера и его роли, пишешь мидлвэйры аутентификации к каждой роли, проверяя есть ли в заголовках запроса токен, если есть то проверяешь наличие роли, есть есть то идешь уже непосредственно с мидлвэйра к контроллеру.

Нажмите, чтобы раскрыть...

Зачем ему jwt?

 

 

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7480

Рейтинг: 4605

iJustS сказал(а):

Нет я просто уточнил твое понимание слова клиент, вдруг у тебя есть фронтенд и ты на нем клиента для бд собрался делать)

 

 

Зачем ему jwt?

 

 

Нажмите, чтобы раскрыть...

l293l сказал(а):

Я пока простой студент, какую терминологию в универе давали, то и говорю. Задание такого, создать БД и сделать для неё приложение-клиент на C#. По крайней мере преподы так говорили. Они где-то ошибались в терминах?

 

Спасибо, конечно, но звучит пока сложно для меня. CatRee.png?1586692042

Нажмите, чтобы раскрыть...

да я не так прочитал, подумал что он про веб  

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

iJustS сказал(а):

Нет я просто уточнил твое понимание слова клиент, вдруг у тебя есть фронтенд и ты на нем клиента для бд собрался делать)

Нажмите, чтобы раскрыть...

 

Ахах, ладно. Так что в итоге сделать? Создать три таблицы? таблицы с ролями, пользователями и связующую таблицу, написать политики для этих ролей и уже потом выполнять смену ролей в подлючении через set role?

 

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

l293l сказал(а):

 

Ахах, ладно. Так что в итоге сделать? Создать три таблицы? таблицы с ролями, пользователями и связующую таблицу, написать политики для этих ролей и уже потом выполнять смену ролей в подлючении через set role?

 

Нажмите, чтобы раскрыть...

Я не понимать тебя

 

Что такое политика?

Создавай сколько хочешь, думаю тебе будет проще 2 таблицы - users, user_roles

Hy6o_Hy6

Пользователь

Регистрация: 16.11.2013

Сообщения: 3527

Рейтинг: 2188

Hy6o_Hy6

Регистрация: 16.11.2013

Сообщения: 3527

Рейтинг: 2188

l293l сказал(а):

Приветствую народ! Похоже на этом форуме сидит немало прогеров, раз выскакивают темы про их заработок 100500 баксов/наносек.

 

В общем такой вопрос, как правильно организовать подключение БД к клиенту на C#? Хотя ЯП не важно, нужна сама концепция.

 

Суть вопроса - мне нужна аунтефикация к БД с разными пользвателями и разным уровнем доступа у этих самых пользователей, как это реализовать? Есть идея создать в бд 2 основных таблицы:

  1.  Таблицу roles (id, и название роли).
  2. Таблицу users (id, id_roles, login, password).

Где в таблице roles содержатся собственно роли на уровне БД, где будут созданы политики для доступа к таблицам для этих ролей. И собственно в самом клиенте определять какой пользователь подключается и через клиент выполнять sql запроса "set role" для изменения текущей роли в подлючении. 

 

Правильно ли так делать или можно по другому, более по умному/простому?

Нажмите, чтобы раскрыть...

roles (id, name)

users (id, role_id, login, password)

user_roles(user_id, role_id)

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

iJustS сказал(а):

Я не понимать тебя Kappa.png

 

Что такое политика?

Создавай сколько хочешь, думаю тебе будет проще 2 таблицы - users, user_roles

Нажмите, чтобы раскрыть...

PostgresSQL там есть политики, чтобы ограничить просматриваемую информацию в какой либо таблице, типо первый пользователь видит всю инфу в таблицу, а второй пользователь только часть.

 

Hy6o_Hy6 сказал(а):

roles (id, name)

users (id, role_id, login, password)

user_roles(user_id, role_id)

Нажмите, чтобы раскрыть...

Уже подсказали выше. Спасибо. Так всё же я правильно понимаю, что надо создать эти таблицы и уже в подлючении к БД через приложении на C# определять какой пользователь подключился и менять роль в текущем подключении?

Hy6o_Hy6

Пользователь

Регистрация: 16.11.2013

Сообщения: 3527

Рейтинг: 2188

Hy6o_Hy6

Регистрация: 16.11.2013

Сообщения: 3527

Рейтинг: 2188

В бд у тебя хранятся только данные, все остальное ты делаешь в своем приложении, там же делаешь конфиг для доступа к бд, user, pass, host, port ... в любом языке есть либы для работы с бд - лучше их испоьзовать, свою писать не советую потратишь много времени

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

l293l сказал(а):

PostgresSQL там есть политики, чтобы ограничить просматриваю информацию в какой либо таблицы, типо первый пользователь видит всю инфу в таблицу, а второй пользователь только часть.

Нажмите, чтобы раскрыть...

емм, а зачем это тебе?

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

iJustS сказал(а):

емм, а зачем это тебе?

Нажмите, чтобы раскрыть...

Чисто по приколу.

 

Спойлер

Надо

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

l293l сказал(а):

Чисто по приколу.

 

Спойлер

Надо

Нажмите, чтобы раскрыть...

Это тебе так препод сказал что для ролей пользователей делать эти ограничения в самой бд через CREATE POLICY?

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

iJustS сказал(а):

Это тебе так препод сказал что для ролей пользователей делать эти ограничения в самой бд через CREATE POLICY?

Нажмите, чтобы раскрыть...

Нет. БД с данными уже есть с некоторыми политика для парочки ролей (дописать остальные нетрудно). У меня возник вопрос, как организовать аунтефикацию, используя эти роли. Типа как определить какой пользователь подключился к БД, какая у него роль, как сменить роль. Вот я и спрашиваю про таблицы с пользователями и ролями. Я хотел их создать, и уже в приложении на C#, выполняя аунтефикацию пользователя, проверять какая у него роль и менять роль текущего подключения (так как вроде подлючение к БД производится с основной роли - суперпользователя, а может и нет, надо прочекать), 

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

l293l сказал(а):

Нет. БД с данными уже есть с некоторыми политика для парочки ролей (дописать остальные нетрудно). У меня возник вопрос, как организовать аунтефикацию, используя эти роли. Типа как определить какой пользователь подключился к БД, какая у него роль, как сменить роль. Вот я и спрашиваю про таблицы с пользователями и ролями. Я хотел их создать, и уже в приложении на C#, выполняя аунтефикацию пользователя, проверять какая у него роль и менять роль текущего подключения (так как вроде подлючение к БД производится с основной роли - суперпользователя, а может и нет, надо прочекать), 

Нажмите, чтобы раскрыть...

Так, давай для начало разберись что где что)

1. Тебе нужны роли пользователей(например роль USER, которая имеет доступ к чтению цены, названия унитазов, роль ADMIN который может менять это все и добавлять новые унитазы, и допустим роль MODERATOR, который в чате приложения имеет доступ к данным юзеров и предлагает им новые унитазы). 

2. Тебе нужно создать 2 таблицы, допустим как я тебе предложил.

3. Тебе нужно написать логику авторизации и аутентификации пользователей по ролям(на C#).

 

Теперь вопрос, зачем тебе создавать политику базы данных? Что по твоему делает эта функция бд? Она абсолютно не относится к твоей задаче(если я ее правильно понял). Эта функция предназначена для администрирования самой бд, а не каких-то твоих приложений, которые подключаются к какой-то конкретной бд и работают с табличками. Там совсем другие роли и тд, это тебе совсем пока не нужно. Этими политиками, как я понял в постгресе, ты управляешь тем, какие пользователи БД(не приложения какого-то там, а именно юзер бд с которым ты через приложение подключался к базе через логин пароль) имеют доступ до каких баз данных на сервере и каких таблиц в этих базах данных. Ты там настраиваешь допустим доступ для одного юзера БД, что он может делать вставки, обновления таблиц(insert, update), но не может ничего удалять, другой юзер допустим может только читать данные в БД, третий допустим имеет полный доступ, включая измнения таблиц(ALTER TABLE). Понимаешь? 

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

iJustS сказал(а):

Так, давай для начало разберись что где что)

1. Тебе нужны роли пользователей(например роль USER, которая имеет доступ к чтению цены, названия унитазов, роль ADMIN который может менять это все и добавлять новые унитазы, и допустим роль MODERATOR, который в чате приложения имеет доступ к данным юзеров и предлагает им новые унитазы). 

2. Тебе нужно создать 2 таблицы, допустим как я тебе предложил.

3. Тебе нужно написать логику авторизации и аутентификации пользователей по ролям(на C#).

 

Теперь вопрос, зачем тебе создавать политику базы данных? Что по твоему делает эта функция бд? Она абсолютно не относится к твоей задаче(если я ее правильно понял). Эта функция предназначена для администрирования самой бд, а не каких-то твоих приложений, которые подключаются к какой-то конкретной бд и работают с табличками. Там совсем другие роли и тд, это тебе совсем пока не нужно. Этими политиками, как я понял в постгресе, ты управляешь тем, какие пользователи БД(не приложения какого-то там, а именно юзер бд с которым ты через приложение подключался к базе через логин пароль) имеют доступ до каких баз данных на сервере и каких таблиц в этих базах данных. Ты там настраиваешь допустим доступ для одного юзера БД, что он может делать вставки, обновления таблиц(insert, update), но не может ничего удалять, другой юзер допустим может только читать данные в БД, третий допустим имеет полный доступ, включая измнения таблиц(ALTER TABLE). Понимаешь? 

Нажмите, чтобы раскрыть...

 

 

У меня простая БД чисто для задания. Есть несколько магазинов. Есть Роль суперпользователя, роль старшего администратора, который не привязан к какому либо магазину, роль админа и продавца, конкретного магазина. Есть единая таблица с этими работниками, где есть этот суперпользователь, то бишь директор, старший админ и т.д. И суть моих политик в том, что старший администратор, не может вставить нового суперпользователя или другого старшего администратора в эту таблицу или же админ конкретного магазина может добавлять только продавцов в свой магазин. Допустим, если админ магазина захочет добавить продавца не в свой магазин, то БД просто выдаст предупреждение, что операция вставки нарушает защиту на уровне строк.

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

l293l сказал(а):

 

 

У меня простая БД чисто для задания. Есть несколько магазинов. Есть Роль суперпользователя, роль старшего администратора, который не привязан к какому либо магазину, роль админа и продавца, конкретного магазина. Есть единая таблица с этими работниками, где есть этот суперпользователь, то бишь директор, старший админ и т.д. И суть моих политик в том, что старший администратор, не может вставить нового суперпользователя или другого старшего администратора в эту таблицу или же админ конкретного магазина может добавлять только продавцов в свой магазин. Допустим, если админ магазина захочет добавить продавца не в свой магазин, то БД просто выдаст предупреждение, что операция вставки нарушает защиту на уровне строк.

Нажмите, чтобы раскрыть...

аа ну так, тогда возможно и надо, разбирайся)

я думал тебе нужно определять роли только для твоего приложения(допустим магазин), где у тебя роли относятся только конкретно этого приложения, например обычный юзер(клиент) приложения, админ(который может управлять продуктами и юзерами на уровне приложения) и тд. А НЕ админы и юзеры(директора и тд) на уровне базы данных.  

DarthGandalf

Пользователь

Регистрация: 03.11.2014

Сообщения: 1027

Рейтинг: 1055

DarthGandalf

Регистрация: 03.11.2014

Сообщения: 1027

Рейтинг: 1055

img

Чтоб не задавать тупых вопросов - учи матчасть. Есть ООП, освой паттерны :

вот хорошо иллюстрировано, поймет даже школьник

Иначе тебе светит писать вечные костыли, хардкодить а потом если получишь каким-то образом оффер будешь мучиться и захочешь сделать паунс в окно. Зная и понимая паттерны тебе будет гораздо легче подходить к решению большинства проблем. Удачи в обучении.

Удалено 795772

Пользователь

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

Удалено 795772

Регистрация: 10.02.2020

Сообщения: -7

Рейтинг: 2

iJustS сказал(а):

аа ну так, тогда возможно и надо, разбирайся)

я думал тебе нужно определять роли только для твоего приложения(допустим магазин), где у тебя роли относятся только конкретно этого приложения, например обычный юзер(клиент) приложения, админ(который может управлять продуктами и юзерами на уровне приложения) и тд. А НЕ админы и юзеры(директора и тд) на уровне базы данных.  

Нажмите, чтобы раскрыть...

Окей, мне главное понять, что я мыслю в верном направлении. Думаю, остановлюсь на варианте таблицы ролей и юзеров для аунтефикации. Спасибо.

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 100

l293l сказал(а):

Окей, мне главное понять, что я мыслю в верном направлении. Думаю, остановлюсь на варианте таблицы ролей и юзеров для аунтефикации. Спасибо.

Нажмите, чтобы раскрыть...

Так тебе получается нужно и аутентификация по ролям для конкретного приложения, и при этом еще и администрация на уровне бд для разных ролей в самой бд?