powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Параметры ХП
40 сообщений из 40, показаны все 2 страниц
Параметры ХП
    #35878768
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Есть следующая проца
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE PROCEDURE [dbo].[EditGroup]
	-- Add the parameters for the stored procedure here
	@IdGroup		int,
	@CaptionGroup	nvarchar(50),
	@DescribeGroup	nvarchar(max)

AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
UPDATE [GMSDatabase].[dbo].[Groups]
   SET [CaptionGroup] = @CaptionGroup
      ,[DescribeGroup] = @DescribeGroup
 WHERE [IdGroup] = @IdGroup
END

Вызываю ее следующей командой:
Код: plaintext
1.
[EditGroup] 1,'qwer','qwer'

Как мне узнать, что
@IdGroup = 1
@CaptionGroup = 'qwer'
@DescribeGroup = 'qwer'

Спасибо.
...
Рейтинг: 0 / 0
Параметры ХП
    #35878784
vagner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где узнать?
...
Рейтинг: 0 / 0
Параметры ХП
    #35878806
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хороший вопрос.

Есть функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
            public virtual DataSet ReturnDataSetDB(String connectionString, String Statement)
            {
                SqlDataAdapter da = new SqlDataAdapter(Statement, connectionString);
                DataSet ds = new DataSet();
                da.Fill(ds, "table");

                return ds;
            }

при вызове
Код: plaintext
1.
ReturnDataSetDB(connectionString, "[EditGroup] 1,'qwer','qwer'");

Хочется дописать функцию, чтобы она еще и проверяла разрешена ли запуск данной процы с данными значениями параметров. А для етого надо знать с какими параметрами хочет функция запуститься.
...
Рейтинг: 0 / 0
Параметры ХП
    #35878812
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KommunarХороший вопрос.
Код: plaintext
1.
ReturnDataSetDB(connectionString, "[EditGroup] 1,'qwer','qwer'");

Хочется дописать функцию, чтобы она еще и проверяла разрешена ли запуск данной процы с данными значениями параметров. А для етого надо знать с какими параметрами хочет функция запуститься.
Ужасный код.
...
Рейтинг: 0 / 0
Параметры ХП
    #35878825
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что так?
...
Рейтинг: 0 / 0
Параметры ХП
    #35878827
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем эти DataAdapters придумали, чтобы люди сразу возвращали DataSet что ли ?
...
Рейтинг: 0 / 0
Параметры ХП
    #35878829
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробегитесь поиском по ветке. Там точно есть.
...
Рейтинг: 0 / 0
Параметры ХП
    #35878849
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что то не нашел, со вчера бегаю.
...
Рейтинг: 0 / 0
Параметры ХП
    #35878919
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут мож че есть
Код: plaintext
Parameters
...
Рейтинг: 0 / 0
Параметры ХП
    #35878924
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что я вас не понимаю совсем, ваша функция - ReturnDataSetDB - по названия и коду грузит набор данных в датасет, но вы в качестве источника выбирающего данные с сервера подсовываете процедуру на UPDATE с set nocount 0 - она ничего не вернет, и код действительно ужасный так не делается переделайте по нормальному и проверяйте значения параметров хран процедуры
...
Рейтинг: 0 / 0
Параметры ХП
    #35878931
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не понял вопроса, если честно, мож в ДБ это сделай.

Плюсов несколько:
1. Работает быстрее
2. Проверка прав на уровне процедуры. Уже никто просто так процедуру не запустит
3. Если будут изменения, версию перекомпиливать не нужно. На целевой машине сделаешь Альтер процедуре.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE PROCEDURE [dbo].[EditGroup]
	-- Add the parameters for the stored procedure here
	@IdGroup		int,
	@CaptionGroup	nvarchar(50),
	@DescribeGroup	nvarchar(max)

AS
BEGIN


IF (@CaptionGroup = 'qwer' OR @DescribeGroup = 'qwer')
BEGIN
   RAISERROR('Wrong parameters.', 16, 1)
END

	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
UPDATE [GMSDatabase].[dbo].[Groups]
   SET [CaptionGroup] = @CaptionGroup
      ,[DescribeGroup] = @DescribeGroup
 WHERE [IdGroup] = @IdGroup
END


...
Рейтинг: 0 / 0
Параметры ХП
    #35878939
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мля... Тут кажись никто не понял вопроса, но кто чем поделился
...
Рейтинг: 0 / 0
Параметры ХП
    #35878947
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:))
...
Рейтинг: 0 / 0
Параметры ХП
    #35879024
Фотография unq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kommunar
[src SQL]
CREATE PROCEDURE [dbo].[EditGroup]
-- Add the parameters for the stored procedure here
@IdGroup int,
@CaptionGroup nvarchar(50),
@DescribeGroup nvarchar(max)


А откуда ваша ХП берет эти переменные?

KommunarВызываю ее следующей командой:
[EditGroup] 1,'qwer','qwer'

Откуда вызываете?
...
Рейтинг: 0 / 0
Параметры ХП
    #35879089
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks-samМля... Тут кажись никто не понял вопроса, но кто чем поделился

Это да
...
Рейтинг: 0 / 0
Параметры ХП
    #35879098
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unqKommunar
[src SQL]
CREATE PROCEDURE [dbo].[EditGroup]
-- Add the parameters for the stored procedure here
@IdGroup int,
@CaptionGroup nvarchar(50),
@DescribeGroup nvarchar(max)


А откуда ваша ХП берет эти переменные?


KommunarВызываю ее следующей командой:
[EditGroup] 1,'qwer','qwer'

Откуда вызываете?

С формы, парметры вызова.

Вызываю по необходимости.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879130
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kommunar, я вам ссылочку давал. Там посмотрели как параметры передаются?
...
Рейтинг: 0 / 0
Параметры ХП
    #35879133
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В какую то не ту степь обсуждение полезло.

Есть проца объявленная выше или любая другая проца с параметрами.

Дают команду на выполнение, так вот надо проверить может ли данная проца в данном контексте выполниться с данными параметрами.

Ограничение на парметры хранятся в базе соответственно чтоб проверить надо знать имя процы, имя параметра и его значение.

Имя процы есть.

Вопрос как при запуске на выпонение
Код: plaintext
1.
[EditGroup] 1,'qwer','qwer'

взять, грубо говоря массив значений этого запуска в виде

ARRAY[0,0] = @IdGroup; ARRAY[0,1] = 1;
ARRAY[1,0] = @CaptionGroup; ARRAY[1,1] = 'qwer';
ARRAY[2,0] = @DescribeGroup; ARRAY[2,1] = 'qwer';

Или в каком - либо другом виде, чтоб можно получить эти значения.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879159
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks-samKommunar, я вам ссылочку давал. Там посмотрели как параметры передаются?

Да немного не то пальто.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879169
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KommunarВ какую то не ту степь обсуждение полезло.

Есть проца объявленная выше или любая другая проца с параметрами.

Дают команду на выполнение, так вот надо проверить может ли данная проца в данном контексте выполниться с данными параметрами.

Ограничение на парметры хранятся в базе соответственно чтоб проверить надо знать имя процы, имя параметра и его значение.

Имя процы есть.

Вопрос как при запуске на выпонение
Код: plaintext
1.
[EditGroup] 1,'qwer','qwer'

взять, грубо говоря массив значений этого запуска в виде

ARRAY[0,0] = @IdGroup; ARRAY[0,1] = 1;
ARRAY[1,0] = @CaptionGroup; ARRAY[1,1] = 'qwer';
ARRAY[2,0] = @DescribeGroup; ARRAY[2,1] = 'qwer';

Или в каком - либо другом виде, чтоб можно получить эти значения.

проверку своих параметров делай в ХП, тем более у тебя допустимые параметры лежат в БД там их удобней проверять, когда все на месте.
На верх бросай эксепшин который лови и оборачивай уже в сообщение чтото типа "У вас нет прав для редактирования группы"
...
Рейтинг: 0 / 0
Параметры ХП
    #35879175
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в процедуре и проверять в зависимости от переданных параметров. Имеются ли прова на выполнение каких либо действий.
Например:
Вызываем процедуру получения списка стран.
В процедуре идет проверка по Id сотрудник можно ли выполнить select...
...
Рейтинг: 0 / 0
Параметры ХП
    #35879183
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PC_2,

Ето надо будет в каждую процу дописывать проверку, немного не удобно.

Вопрос остается открытым.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879199
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KommunarPC_2,

Ето надо будет в каждую процу дописывать проверку, немного не удобно.

Вопрос остается открытым.

Напиши функцию в БД которая проверяет пермишены и в ней проверяй.
Приимущества проверки прав на уровне БД я писал выше
...
Рейтинг: 0 / 0
Параметры ХП
    #35879213
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KommunarPC_2,

Ето надо будет в каждую процу дописывать проверку, немного не удобно.

Вопрос остается открытым.
Вам в нужном направлении указали. В каждой ХП.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879247
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PC_2KommunarPC_2,

Ето надо будет в каждую процу дописывать проверку, немного не удобно.

Вопрос остается открытым.

Напиши функцию в БД которая проверяет пермишены и в ней проверяй.
Приимущества проверки прав на уровне БД я писал выше

Хорошо вопрос следующий:

Можно ли написать процу которая будет по умолчанию запускаться при запуске процедур в базе не на сервере?
...
Рейтинг: 0 / 0
Параметры ХП
    #35879252
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks-samKommunarPC_2,

Ето надо будет в каждую процу дописывать проверку, немного не удобно.

Вопрос остается открытым.
Вам в нужном направлении указали. В каждой ХП.

В каждой ХП, а если учесть человеческий фактор, просто забыли программисты прописать, проца будет запускаться как угодно?
...
Рейтинг: 0 / 0
Параметры ХП
    #35879357
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя есть семантическая связка Операция/Проверка прав.

Тоесть проверка прав завязана на операции ( Например Чтение, Редактирование ).

Проверка прав не может быть завязана на типах переданных параметров в зоопарк процедур.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879377
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему нельзя сделать все по-человечески: разграничением прав доступа на запуск хп на стороне сервера, через роли?
...
Рейтинг: 0 / 0
Параметры ХП
    #35879413
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zzПочему нельзя сделать все по-человечески: разграничением прав доступа на запуск хп на стороне сервера, через роли?
+100
...
Рейтинг: 0 / 0
Параметры ХП
    #35879422
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zz,

да можно никто не спорит.

Тут идея в другом:

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

проца может запуститься от конкретной группы и но с разными значениями пармаетра, т.е.

если в проце есть параметр @IdPaymant, то одна группа может запустить процу со значениями параметра 1,2,3 и ни с какими другими, то другая например только с 4.

Надеюсь понятно объяснил.

Поетому и ищу пути распарсить строку вызова ХП по значениям параметр - значение, чтоб потом проверить правильно ли пользователь запускает ее.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879440
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты скажи кто у тебя эту строку формирует ?
Код: plaintext
1.
"[EditGroup] 1,'qwer','qwer'"
...
Рейтинг: 0 / 0
Параметры ХП
    #35879463
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторограничения хранятся в базе
так вот и непонятно зачем их хранить в базе, если можно средствами sql server-а разделить доступ.
зачем велосипед строить?
...
Рейтинг: 0 / 0
Параметры ХП
    #35879467
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PC_2,


Ну шаблоя пишу, а парметры подставляются при вооде пользователдем данных с формы.

Код: plaintext
1.
"[EditGroup] TextBox1.Text,TextBox2.Text,TextBox2.Text"

Типа этого.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879478
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
winsky!авторограничения хранятся в базе
так вот и непонятно зачем их хранить в базе, если можно средствами sql server-а разделить доступ.
зачем велосипед строить?

Можно пример или где посмотреть почитать, я что то такого не встречал.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879490
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KommunarPC_2,


Ну шаблоя пишу, а парметры подставляются при вооде пользователдем данных с формы.

Код: plaintext
1.
"[EditGroup] TextBox1.Text,TextBox2.Text,TextBox2.Text"

Типа этого.

Это большая дыра по секьюрити.
Вот так формируй свои параметры.
Тогда параметры будут лежать там где нужно и их не нужно будет парсить.

Код: plaintext
1.
2.
3.
4.
5.
SqlCommand command = new SqlCommand("AddCardTransaction", m_connection);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue("@TypeName", TypeName);
            command.Parameters.AddWithValue("@TransactionID", TransactionID);
            command.ExecuteNonQuery();
...
Рейтинг: 0 / 0
Параметры ХП
    #35879540
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kommunar, ну тогда тебе надо как-то централизовывать вызов своих процедур. Можно взять какой-нибудь BlToolkit и "перекроить" его под себя, но это чересчур брутально и требует знания IL.
Можно слепить некий полумер, типа такого:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
        /// <summary>
        /// Универсмальный вызов хранимок.
        /// </summary>
        /// <param name="method">Вызывающий метод</param>
        /// <param name="values">Параметры</param>
        /// <returns></returns>
	    public static SqlCommand GenerateCommand(MethodInfo method, object[] values)
	    {

	        SqlParameter prm;

	        string SPName = method.Name;
	        SqlCommand cmd = new SqlCommand(SPName, ConnectionString)
	                             {CommandType = CommandType.StoredProcedure};

	        ParameterInfo[] prms = method.GetParameters(); //Тут имена параметров

	        for (int i = 0; i < prms.Length; i++)
	        {
	            prm = cmd.Parameters.AddWithValue("@" + prms[i].Name, values[i]);
	            if (prms[i].IsOut) prm.Direction = ParameterDirection.Output;
	        }

	        //Тут вызов некоей универсальной функции проверки. Передаем ей имя ХП,
	        //массив имен параметров, массив значений параметров. Можно при желании слепить структуру.
	        Verify(SPName, prms, values);

	        return cmd;
	    }

Использование:
Код: plaintext
1.
2.
3.
4.
        public static void EditGroup(int IdGroup, int CaptionGroup, int DescribeGroup)
        {
            SqlCommand cmd = Commands.GenerateCommand((MethodInfo)MethodBase.GetCurrentMethod(), new object[] { IdGroup, CaptionGroup, DescribeGroup });
            Commands.Execute(cmd);
        }

Писалось на коленке, так что возомжны артефакты.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879567
Kommunar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PC_2KommunarPC_2,


Ну шаблоя пишу, а парметры подставляются при вооде пользователдем данных с формы.

Код: plaintext
1.
"[EditGroup] TextBox1.Text,TextBox2.Text,TextBox2.Text"

Типа этого.

Это большая дыра по секьюрити.
Вот так формируй свои параметры.
Тогда параметры будут лежать там где нужно и их не нужно будет парсить.

Код: plaintext
1.
2.
3.
4.
5.
SqlCommand command = new SqlCommand("AddCardTransaction", m_connection);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue("@TypeName", TypeName);
            command.Parameters.AddWithValue("@TransactionID", TransactionID);
            command.ExecuteNonQuery();


Почему дыра?
...
Рейтинг: 0 / 0
Параметры ХП
    #35879635
PC_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KommunarPC_2KommunarPC_2,


Ну шаблоя пишу, а парметры подставляются при вооде пользователдем данных с формы.

Код: plaintext
1.
"[EditGroup] TextBox1.Text,TextBox2.Text,TextBox2.Text"

Типа этого.

Это большая дыра по секьюрити.
Вот так формируй свои параметры.
Тогда параметры будут лежать там где нужно и их не нужно будет парсить.

Код: plaintext
1.
2.
3.
4.
5.
SqlCommand command = new SqlCommand("AddCardTransaction", m_connection);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue("@TypeName", TypeName);
            command.Parameters.AddWithValue("@TransactionID", TransactionID);
            command.ExecuteNonQuery();


Почему дыра?

Читай про взлом через иньекции.
...
Рейтинг: 0 / 0
Параметры ХП
    #35879674
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kommunar
...

Почему дыра?
...
Рейтинг: 0 / 0
Параметры ХП
    #35879840
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kommunar
Можно пример или где посмотреть почитать, я что то такого не встречал.
в BOL - security [SQL Server]. там много всего написано.

Модератор: Тема перенесена из форума "C#.NET".
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Параметры ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]