Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access Access 2010:用户登录或将记录限制为用户_Ms Access - Fatal编程技术网

Ms access Access 2010:用户登录或将记录限制为用户

Ms access Access 2010:用户登录或将记录限制为用户,ms-access,Ms Access,在MS Access 2010中,是否可以限制用户可以在dataview表单中看到的记录?例如,用户A应仅查看来自部门A的记录,而用户B应仅查看来自部门B的记录。创建一个查询,该查询使用您的业务规则作为约束,仅返回用户应允许访问的行子集。然后使用该查询作为记录源构建表单 该方法取决于两个条件: 您有一个识别当前用户的方法 您可以将业务规则实现为查询WHERE子句 您可以使用API方法获取当前用户的Windows帐户名。请参阅上的示例。如果您的db文件是MDB格式,则可以设置ULS(用户级安全),

在MS Access 2010中,是否可以限制用户可以在dataview表单中看到的记录?例如,用户A应仅查看来自部门A的记录,而用户B应仅查看来自部门B的记录。

创建一个查询,该查询使用您的业务规则作为约束,仅返回用户应允许访问的行子集。然后使用该查询作为记录源构建表单

该方法取决于两个条件:

  • 您有一个识别当前用户的方法
  • 您可以将业务规则实现为查询
    WHERE
    子句
  • 您可以使用API方法获取当前用户的Windows帐户名。请参阅上的示例。如果您的db文件是MDB格式,则可以设置ULS(用户级安全),并使用
    CurrentUser()
    函数获取访问用户名。较新的ACCDB格式不支持ULS,但Access 2010仍可以使用MDB格式的db文件

    这两种方法都可以满足第一个条件。您还可以开发代码来管理自定义用户帐户,但这对我来说似乎太多额外的工作了

    类似的东西可以将您的业务规则实现为查询
    WHERE
    子句。它使用上面链接中的
    fOSUserName()
    函数

    WHERE
        department = Switch(
            fOSUserName() = 'User A', 'department A',
            fOSUserName() = 'User B', 'department B')
    

    但是,一种不那么脆弱的方法是内部联接一个表,该表包含与其应允许查看的部门匹配的用户名。

    创建一个查询,该查询使用您的业务规则作为约束,仅返回用户应允许访问的行子集。然后使用该查询作为记录源构建表单

    该方法取决于两个条件:

  • 您有一个识别当前用户的方法
  • 您可以将业务规则实现为查询
    WHERE
    子句
  • 您可以使用API方法获取当前用户的Windows帐户名。请参阅上的示例。如果您的db文件是MDB格式,则可以设置ULS(用户级安全),并使用
    CurrentUser()
    函数获取访问用户名。较新的ACCDB格式不支持ULS,但Access 2010仍可以使用MDB格式的db文件

    这两种方法都可以满足第一个条件。您还可以开发代码来管理自定义用户帐户,但这对我来说似乎太多额外的工作了

    类似的东西可以将您的业务规则实现为查询
    WHERE
    子句。它使用上面链接中的
    fOSUserName()
    函数

    WHERE
        department = Switch(
            fOSUserName() = 'User A', 'department A',
            fOSUserName() = 'User B', 'department B')
    

    但是,一种不那么脆弱的方法是内部联接一个表,该表包含与允许他们查看的部门匹配的用户名。

    非常感谢您的详细答复。明天我将试用你的方法。我有一个问题:您确定可以像在示例中那样在access查询中调用vba函数吗?或者,这只能在vba宏中实现。只要您在Access应用程序会话中运行查询,是的,您的查询就可以使用用户定义的函数。我们经常这样做。如果您将从外部访问运行查询(如从经典ASP、VBScript、Dot.Net等),则查询将无法使用UDF。。。与此相同,它不能使用某些VBA函数,如
    Nz()
    .Perfect。正如你所描述的那样。谢谢你的帮助。我还找到了另一种/更短的方法来获取windows登录用户名“user_name=Environ(“USERNAME”)”。请注意,
    Environ(“USERNAME”)
    很容易被击败。用户可以打开命令窗口,将用户名更改为假值,然后从该环境开始访问。如果您关心安全性,请使用Windows API确定用户名。由于您似乎对Access有丰富的经验,我想问您是否有对用户保护/隐藏数据库结构的想法:非常感谢您的详细答复。明天我将试用你的方法。我有一个问题:您确定可以像在示例中那样在access查询中调用vba函数吗?或者,这只能在vba宏中实现。只要您在Access应用程序会话中运行查询,是的,您的查询就可以使用用户定义的函数。我们经常这样做。如果您将从外部访问运行查询(如从经典ASP、VBScript、Dot.Net等),则查询将无法使用UDF。。。与此相同,它不能使用某些VBA函数,如
    Nz()
    .Perfect。正如你所描述的那样。谢谢你的帮助。我还找到了另一种/更短的方法来获取windows登录用户名“user_name=Environ(“USERNAME”)”。请注意,
    Environ(“USERNAME”)
    很容易被击败。用户可以打开命令窗口,将用户名更改为假值,然后从该环境开始访问。如果您关心安全性,请使用Windows API确定用户名。由于您似乎在Access方面有丰富的经验,我想问您是否有对用户保护/隐藏数据库结构的想法: