私はすでにC#とSQL 2008を使用してWindowsアプリを設計しました。次に、そのユーザーがどの部分とそのアクセス許可にアクセスできるかを制御したいと思います。
だから、私はSQLでテーブルを設計し、各ユーザーの権限を設定する方が良いのか、それとも他の解決策があるのか知りたいですか?
私はすでにC#とSQL 2008を使用してWindowsアプリを設計しました。次に、そのユーザーがどの部分とそのアクセス許可にアクセスできるかを制御したいと思います。
だから、私はSQLでテーブルを設計し、各ユーザーの権限を設定する方が良いのか、それとも他の解決策があるのか知りたいですか?
一般的に、私が見たのは次のようなものです。
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