SQL代码安全性



我想使用一个在线的MYSQL数据库,该数据库主要通过桌面和手机应用程序访问。我希望有人能快速查看我的代码,并告诉我在安全方面需要更改/改进什么。基本上,我的代码可以改进还是应该更改?

这是我的代码:

Create Database db_person_cdtest;
USE [db_person_cdtest]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [Person](
[PersonID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[ID] [varchar](20),
[FirstName] [varchar](50) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[AddressLine1] [varchar](50),
[AddressLine2] [varchar](50),
[AddressLine3] [varchar](50),
[MobilePhone] [varchar](20),
[HomePhone] [varchar](20),
[Description] [varchar](10),
[DateModified] [datetime],
[PersonCategory] [varchar](30) NOT NULL,
[Comment] [varchar](max),
 CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED 
(
[PersonID] DESC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY];
CREATE PROCEDURE usp_InsertPerson
(
@ID VARCHAR(20),
@FirstName VARCHAR(50),
@LastName VARCHAR(50),
@AddressLine1 VARCHAR(50),
@AddressLine2 VARCHAR(50),
@AddressLine3 VARCHAR(50),
@MobilePhone VARCHAR(20),
@HomePhone VARCHAR(20),
@Description VARCHAR(10),
@Comment VARCHAR(max)
)
AS
BEGIN
Declare @PersonCategory VARCHAR(30)
SET @PersonCategory = dbo.usp_PersonCategoryLookup(@ID, @Description)
INSERT INTO Person(ID, FirstName, LastName, AddressLine1, AddressLine2, AddressLine3, MobilePhone, HomePhone, Description, DateModified, PersonCategory, Comment)
VALUES (@ID, @FirstName, @LastName, @AddressLine1, @AddressLine2, @AddressLine3, @MobilePhone, @HomePhone, @Description, GETDATE (), @PersonCategory, @Comment)
END
CREATE PROCEDURE usp_UpdatePerson
(
@PersonID numeric(18, 0),
@ID VARCHAR(20),
@FirstName VARCHAR(50),
@LastName VARCHAR(50),
@AddressLine1 VARCHAR(50),
@AddressLine2 VARCHAR(50),
@AddressLine3 VARCHAR(50),
@MobilePhone VARCHAR(20),
@HomePhone VARCHAR(20),
@Description VARCHAR(10),
@Comment VARCHAR(max)
)
AS
BEGIN
    Declare @PersonCategory VARCHAR(30)
SET @PersonCategory = dbo.usp_PersonCategoryLookup(@ID, @Description)
Update Person set ID=@ID, FirstName=@FirstName, LastName=@LastName, AddressLine1=@AddressLine1, AddressLine2=@AddressLine2, AddressLine3=@AddressLine3, MobilePhone=@MobilePhone, HomePhone=@HomePhone, Description=@Description, DateModified=GETDATE (), PersonCategory=@PersonCategory, Comment=@Comment where PersonID=@PersonID
END
CREATE PROCEDURE usp_SearchPerson
(
@SearchCriteria VARCHAR(50)
)
AS
BEGIN
Select * from Person where FirstName like @SearchCriteria or LastName like @SearchCriteria or PersonCategory like @SearchCriteria
END
CREATE PROCEDURE usp_SelectPerson
(
@PersonID numeric(18, 0)
)
AS
BEGIN
select * from Person where PersonID=@PersonID
END
CREATE FUNCTION usp_PersonCategoryLookup
(
@ID VARCHAR(20),
@Description VARCHAR(10)
)
RETURNS VARCHAR(30)
AS
BEGIN
    return @ID + @Description
END

您可以将以下列添加到人员表中:

  • CreatedByUser(varchar或int)
  • CreatedDateTime(日期时间)
  • LastUpdateByUser(varchar或int)
  • 上次更新日期时间(日期时间)

这是因为,通过这种方式,您可以查看谁是创建记录的用户和上次更新记录的用户,以便进行审核。

此外,尽管这与安全性无关,但请避免在select语句上使用星号(*)。放置要返回的列名。这将在将来为你省去很多麻烦。

如果您计划分发此应用程序,请注意,可以轻松地反编译.net应用程序并查看源代码。这为用户创建了获取数据库连接信息的可能性,并可能为他们提供访问完整数据库的权限。您可能需要做一些研究,以正确锁定此项目中使用的用户帐户。

此外,忽略任何表示要在运行时加密连接信息并对其进行解密的人。如果您的代码中有要在运行时解密的方法,那么反编译您的应用程序的人也将拥有这些方法。代码混淆是另一种选择,但只会减慢进程,而不会阻止它。

最新更新