ali643
پنج شنبه 11 مرداد 1386, 23:11 عصر
سلام دوستان
یک جدول دارم که می خوام اطلاعات درونش رو با یه SP پاک کنم
Script جدول
CREATE TABLE [dbo].[tbl_Groups](
[Group_ID] [int] IDENTITY(1,1) NOT NULL,
[Group_Name] [nvarchar](50) NULL
) ON [PRIMARY]
وقتی که SP زیر را می نویسم و Exec می کنم برای یک رکورد درست جواب می ده و رکورد رو Delete می کنه اما وقتی برا مجموعه ای از رکورد ها می خوام استفاده کنم مشکل داره
ALTER PROCEDURE [dbo].[sptbl_GroupsDelete]
@Group_ID nvarchar (300)
AS
DELETE FROM tbl_Groups WHERE Group_ID IN (@Group_ID)
go
کد خطا
Msg 245, Level 16, State 1, Procedure sptbl_GroupsDelete, Line 7
Conversion failed when converting the nvarchar value '62,63' to data type int.
اما وقتی با استفاده از SP زیر این کارو انجام می دهم مشکلی وجود نداره و فقط مشکل SQL INjection داره که اونم میشه از طریق برنامه نویسی مشکلش رو حل کرد.
ALTER PROCEDURE [dbo].[sptbl_GroupsDelete]
@Group_ID nvarchar (300)
AS
DECLARE @strsql NVARCHAR(400)
SET @strsql = 'DELETE FROM tbl_Groups WHERE Group_ID IN ('+@Group_ID+')'
EXEC sp_executesql @strsql
go
با استفاده از این کد Sql Injection به وجود می آد.
exec sptbl_GroupsDelete '60); select * from tbl_groups --'
حالا من می خوام بدونم که مشکل SP اول چی هست که نمی تونه اطلاعات رو پاک کنه؟؟
مرسی.
یک جدول دارم که می خوام اطلاعات درونش رو با یه SP پاک کنم
Script جدول
CREATE TABLE [dbo].[tbl_Groups](
[Group_ID] [int] IDENTITY(1,1) NOT NULL,
[Group_Name] [nvarchar](50) NULL
) ON [PRIMARY]
وقتی که SP زیر را می نویسم و Exec می کنم برای یک رکورد درست جواب می ده و رکورد رو Delete می کنه اما وقتی برا مجموعه ای از رکورد ها می خوام استفاده کنم مشکل داره
ALTER PROCEDURE [dbo].[sptbl_GroupsDelete]
@Group_ID nvarchar (300)
AS
DELETE FROM tbl_Groups WHERE Group_ID IN (@Group_ID)
go
کد خطا
Msg 245, Level 16, State 1, Procedure sptbl_GroupsDelete, Line 7
Conversion failed when converting the nvarchar value '62,63' to data type int.
اما وقتی با استفاده از SP زیر این کارو انجام می دهم مشکلی وجود نداره و فقط مشکل SQL INjection داره که اونم میشه از طریق برنامه نویسی مشکلش رو حل کرد.
ALTER PROCEDURE [dbo].[sptbl_GroupsDelete]
@Group_ID nvarchar (300)
AS
DECLARE @strsql NVARCHAR(400)
SET @strsql = 'DELETE FROM tbl_Groups WHERE Group_ID IN ('+@Group_ID+')'
EXEC sp_executesql @strsql
go
با استفاده از این کد Sql Injection به وجود می آد.
exec sptbl_GroupsDelete '60); select * from tbl_groups --'
حالا من می خوام بدونم که مشکل SP اول چی هست که نمی تونه اطلاعات رو پاک کنه؟؟
مرسی.