【发布时间】:2013-03-14 01:37:15
【问题描述】:
我已经使用 C# 和 SQL 2008 设计了 Windows 应用程序。 现在,我想控制该用户可以访问哪个部分及其权限。
那么,我想知道在sql中设计表并为每个用户设置权限更好还是有其他解决方案?
【问题讨论】:
标签: c# sql windows permissions
我已经使用 C# 和 SQL 2008 设计了 Windows 应用程序。 现在,我想控制该用户可以访问哪个部分及其权限。
那么,我想知道在sql中设计表并为每个用户设置权限更好还是有其他解决方案?
【问题讨论】:
标签: c# sql windows permissions
一般来说,我所看到的大致如下:
有一个类似这样的tblUser 表:
tblUser
UserId
UserName
etc...
角色表:
tblRole
RoleId
Name
还有一个链接器表:
tblUserRole
UserId
RoleId
在您的应用程序中,您将检查当前用户是否在tblUserRole 表中具有相应的角色。如果是这样,则允许当前用户使用该功能,否则显示错误消息,禁止用户进入等...
以MS SQL 为例,您可以拥有以下类型的Stored Procedure:
添加用户
CREATE PROCEDURE spAddUser
@UserName AS nvarchar(256)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO tblUser
(UserName)
VALUES(@UserName)
SELECT SCOPE_IDENTITY( ) AS 'Id'
END
GO
添加用户角色
CREATE PROCEDURE spAddUserRole
@UserId AS int,
@RoleId As int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO tblUserRole
(UserId, RoleId)
VALUES(@UserId, @RoleId)
END
GO
用户有角色吗
CREATE PROCEDURE spDoesUserHaveRole
@UserId AS int,
@RoleId As int,
@HasRole AS bit OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT @HasRole = COUNT(UserId) > 0 FROM tblUserRole
WHERE UserId = @UserId AND
RoleId = @RoleId
END
GO
【讨论】:
SPROC 或您的代码中。