小编Joe*_*app的帖子

授予PostgreSQL中特定数据库的权限

我正在从MySQL迁移到PostgreSQL并且已经打破了用户权限.我习惯使用以下命令为用户分配数据库的所有表的所有权限:

# MySQL
grant all privileges on mydatabase.* to 'myuser'@'localhost' identified by 'mypassword';
Run Code Online (Sandbox Code Playgroud)

在我看来,PostgreSQL 9.x解决方案涉及为"模式"分配权限,但我需要努力弄清楚究竟要发出什么SQL证明是过分的.我知道再花几个小时的研究会得出答案,但我认为每个从MySQL迁移到PostgreSQL的人都可以从网上至少有一个提供简单完整配方的页面中受益.这是我需要为用户发出的唯一命令.我宁愿不必为每个新表发出命令.

我不知道在PostgreSQL中必须以不同的方式处理哪些场景,所以我将列出我过去通常必须处理的一些场景.假设我们只想修改已创建的单个数据库的权限.

(1a)并非所有表都已创建,或(1b)表已经创建.

(2a)尚未创建用户,或(2b)已创建用户.

(3a)尚未将权限分配给用户,或者(3b)先前已将权限分配给用户.

(4a)用户只需要插入,更新,选择和删除行,或者(4b)用户还需要能够创建和删除表.

我已经看到了为所有数据库授予所有权限的答案,但这不是我想要的.拜托,我正在寻找一个简单的食谱,虽然我也不介意解释.

我不想授予所有用户和所有数据库的权限,因为这似乎是传统的快捷方式,因为当任何一个用户受到攻击时,该方法会破坏所有数据库.我托管多个数据库客户端并为每个客户端分配不同的登录.

看起来我还需要USAGE获得serial列的增加值的权限,但我必须以某种顺序授予它.我的问题变得更复杂了.

sql database postgresql privileges

22
推荐指数
1
解决办法
2万
查看次数

将泛型类型限制为 Typescript 中的几个类之一

在 Typescript 中,如何在编译时将泛型类型限制为多个类之一?例如,你如何实现这个伪代码?

class VariablyTyped<T has one of types A or B or C> {

    method(hasOneType: T) {
        if T has type A:
            do something assuming type A
        if T has type B:
            do something assuming type B
        if T has type C:
            do something assuming type C
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,我希望能够将属性(或任何变量)分配给通用类型选项之一的特定后代类型,而不仅仅是给定类型之一。例如:

class VariablyTyped<T has one of types A or B or C> {

    descendentClassOfT: T

    method(hasOneType: T) {
        descendentClassOfT = hasOneType
    }
}

class D extends class C {
    methodUniqueToD() …
Run Code Online (Sandbox Code Playgroud)

generics restriction typescript typescript-generics

12
推荐指数
1
解决办法
5265
查看次数

使用 Android 数据绑定时禁用 Kotlin 合成绑定

我正在Android/Kotlin/KTX 上完成这个 Udacity 课程。“关于我”应用程序引入了数据绑定,而 Android 团队似乎不建议使用 KTX 绑定。所以我想做前者而不是后者。

然而,事情并没有像预期的那样发展。这些是我面临的奇怪问题:

  1. 在我第一次通过时,我无法让 Android Studio 识别我的任何R.id.viewNameID。打字R.id.会给我各种选项,例如R.id.action_bar,但我的活动中没有。在某些时候,这清除了。
  2. 编辑器抱怨数据绑定类的未解析引用,直到我构建了这个东西(例如lateinit var binding: ActivityMainBinding)。实际上,我认为它需要不止一次构建,可能是因为我在其他地方乱搞(见下文)而得到修复。
  3. 每个视图 ID 仍在生成为包含该 ID 的视图对象的全局变量。也就是说,如果我有一个带有 ID 的按钮doneButton,我可以在代码中将它作为合成引用,doneButton只需导入它即可。我认为这意味着对象总是在运行时构建的,即使我不打算使用它们。如何让这些 KTX 风格的绑定消失?

这是我的构建gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.3.31'
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-databinding android-ktx android-jetpack

7
推荐指数
1
解决办法
1183
查看次数

防止小部件填充在 Flutter 中扩展的祖先

如何防止 aRaisedButton扩展以填充Expanded包含它的 ?我想创建三列宽度与可用空间成正比的列,但我希望每列中的子项是其自然大小,而不消耗其父项的整个宽度Expanded

  Widget _controls(BuildContext cx) {
    return Row(
      children: [
        Expanded(
          flex: 1,
          child: player.isOnFirstItem
              ? Container()
              : IconButton(
                  icon: Icon(Icons.arrow_back),
                  onPressed: () => control.gotoPreviousItem(),
                ),
        ),
        Expanded(
          flex: 4,
          child: player.isComplete()
              ? Text(player.currentItem.status) // I'll be adding more here
              : RaisedButton(
                  child: Text(player.currentItem.actionText),
                  onPressed: () => player.currentItem.action(),
                ),
        ),
        Expanded(
          flex: 1,
          child: player.isOnLastItem
              ? Container()
              : IconButton(
                  icon: Icon(Icons.arrow_forward),
                  onPressed: () => player.gotoNextItem(),
                ),
        ),
      ],
    );
Run Code Online (Sandbox Code Playgroud)

RaisedButton还填充内的柔性空间时,我还窝它Container …

flutter flutter-layout flutter-widget

7
推荐指数
1
解决办法
1151
查看次数

在 Dart 中抛出错误的正确方法

Dart提供了一个Error类和一个Exception用于抛出异常的类。为什么Error构造函数不像构造函数那样接受消息参数Exception

来自错误类文档

程序失败时抛出的错误对象。

Error 对象表示程序员应该避免的程序故障。

来自异常类文档

异常旨在向用户传达有关故障的信息,以便可以通过编程方式解决该错误。它旨在被捕获,并且应该包含有用的数据字段。

较早的SO 答案引用了一篇帖子,证实了这种区别。

我喜欢这种区别。这告诉我,我的许多检查应该抛出Error.

我很高兴使用Error错误类型进行子类化,但我仍然需要报告引发错误的值。为什么 Dart 让我可以轻松地使用 来执行此操作,Exception但不能使用Error

我意识到我可以通过声明应用程序范围的错误类来解决问题:

class AppError extends Error {
  String message;

  AppError([this.message]);

  String toString() {
    return message == null ? runtimeType : "$runtimeType: $message";
  }
}
Run Code Online (Sandbox Code Playgroud)

Error和之间的差异Exception让我认为我误解了Error或使用不当。在 Dart 中抛出非用户错误的正确方法是什么?

error-handling exception dart

6
推荐指数
1
解决办法
3487
查看次数

单页应用程序应该如何提供永久链接?

为通过单页面应用程序管理的资源提供可公开访问的URL有哪些约定?我认为这是一个建筑设计问题,但我预计会在AngularJS中开发SPA,以防万一.我是SPA的新手.

用户将通过SPA创建,查看和修改各种类型的资源(例如,基于服务器的对象).通过永久链接URL,公众也可以访问这些相同的资源.我很好用SPA在访问资源的永久链接URL时为访问者显示资源.

我只能想到这两种方法:

  1. 放置所有资源,在此http://example.com/resourcetype/resourceID实现RESTful API(改变HTTP方法).
  2. 将所有固定链接放在http://example.com/resourcetype/resourceID并命中SPA http://example.com/api/resourcetype/resourceID.

(将永久链接置于其下似乎不合理/api.通过"永久链接",我只是指资源的公共未登录URL.)

我希望通过SPA导航到资源的用户到达可共享的URL,因为想要共享该页面的用户首先想要共享其URL,而不是首先找到指向永久链接页面的链接.这表明采用第一种方法,但第二种方法是用于经由网址,如版本的API更好/api/v1,/api/v2

避免URL中的哈希是理想的.我知道我可以在AngularJS中使用HTML5模式在支持该模式的浏览器中隐藏它们.这也需要服务器端支持,我已经看到了将深层链接重写为SPA访问URL链接的解决方案.

我想知道人们在做什么,以及人们是否发现自己在实践中限制了SPA的使用.谢谢你的帮助!

rest permalinks angularjs single-page-application

5
推荐指数
1
解决办法
1217
查看次数

在 Dart 中将 ByteBuffer 快速复制到 ByteBuffer

如何在 Dart 中将 ByteBuffer 的字节快速复制到另一个更大的 ByteBuffer(以非零偏移量)?

有一些缓慢的方法可以做到这一点。一种是将每个都转换为 Uint8List 并一次复制一个索引。另一种方法是将每个转换为 Uint8List,为第一个获取迭代器,然后调用setRange()第二个。

我认为应该有一种更直接的方法来要求 Dart API 快速将字节序列从一个缓冲区复制到另一个缓冲区。API 可以本地优化此副本。如果不是,那么最快的方法是什么?

bytebuffer copy dart

5
推荐指数
1
解决办法
156
查看次数

对基于 JWT 的服务器的破坏是否更具破坏性?

更新:我已经结束了对这个问题的研究,并发布了一篇冗长的博客文章来解释我的发现:JWT 的不言而喻的漏洞。我解释了使用 JWT 进行本地身份验证的巨大推动如何忽略了一个关键细节:必须保护签名密钥。我还解释说,除非您愿意不遗余力地保护密钥,否则最好通过 Oauth 委托身份验证或使用传统的会话 ID。


我已经看到很多关于 JSON Web 令牌安全性的讨论——重放、撤销、数据透明度、令牌指定的算法、令牌加密、XSS、CSRF——但我没有看到任何对依赖于签名密钥。

如果有人破坏了服务器并获得了 JWT 签名密钥,在我看来,此人此后可以使用该密钥伪造未过期的 JWT 并秘密获得访问权限。当然,服务器可以在每个请求上查找每个 JWT 以确认其有效性,但服务器完全使用 JWT,因此它们不必这样做。服务器可以确认 IP 地址,但如果 JWT 不可信,这也涉及查找,显然这样做会排除可靠的移动访问。

将此与基于会话 ID 的服务器违规进行对比。如果此服务器正在散列密码,则攻击者必须在会话 ID 过期之前分别为每个用户获取并使用会话 ID。如果服务器仅存储会话 ID 的哈希值,则攻击者必须写入服务器以确保访问。无论如何,攻击者似乎没有那么有利。

我发现了一种使用 JWT 的架构而没有这个缺点。反向代理位于外部不受信任的客户端和内部微服务的后端集合之间,由 Nordic API 在此处描述. 客户端从授权服务器获取不透明令牌,并使用该令牌与服务器应用程序通信以处理所有请求。对于每个请求,代理将不透明令牌转换为 JWT 并缓存它们的关联。外部世界从不提供 JWT,限制了因窃取密钥而造成的损害(因为代理会转到身份验证服务器以确认不透明的令牌)。但是,这种方法需要取消引用每个客户端令牌,就像会话 ID 需要针对每个请求取消引用一样,从而消除了 JWT 对客户端请求的好处。在这种情况下,JWT 只允许服务在彼此之间传递用户数据,而不必完全信任彼此——但我仍在尝试理解这种方法的价值。

我的担忧似乎仅适用于不受信任的客户端使用 JWT 作为身份验证令牌。然而,JWT 被许多备受瞩目的 API 使用,包括 Google API。我错过了什么?也许服务器漏洞很少是只读的?有没有办法降低风险?

security digital-signature secret-key jwt

4
推荐指数
1
解决办法
1586
查看次数

安装打字后 VSC 中刷新错误

使用 Visual Studio Code (v1.16.0),在为所需模块之一安装 Typescript 类型后,如何刷新“问题”窗格中的错误?(编辑:在后台加载或更新依赖模块时也存在类似的问题。)

重建是不行的。我目前正在更改并重新保存每个文件,以强制 VSC 重新生成错误并反映新安装的类型。我想我可以关闭该项目并在有很多文件时重新打开它。

我有点不好意思问这个问题,因为它看起来很基本。

我需要一个能够将构建委托给 gulp 任务的解决方案。gulp 任务使用编译器选项来tsconfig.json确保 VSC 和构建报告相同的编译器错误。但是,我已经确认,即使通过 构建,“问题”窗格也不会更新tsc: build - tsconfig.json

typescript visual-studio-code typescript-typings

4
推荐指数
1
解决办法
4197
查看次数

子类应该继承 Dart 中的私有 mixin 变量吗?

我应该得到以下错误:

class.dart:11:11:错误:没有为类“Y”定义 getter“_privateID”。-“Y”来自“class.dart”。尝试将名称更正为现有 getter 的名称,或定义名为“_privateID”的 getter 或字段。

从下面的代码?

mixin.dart

class Mixin {
  static int _nextID = 0;

  int publicID = _nextID++; // I only need one of these lines
  int _privateID = _nextID++; // but this variable is inaccessible
}
Run Code Online (Sandbox Code Playgroud)

类.dart

import 'mixin.dart';

class X with Mixin {
  void run() {
    print(publicID); // no error here
  }
}

class Y with Mixin {
  void run() {
    print(_privateID); // Error: _privateID not defined
  }
}

void main() {
  Y().run(); …
Run Code Online (Sandbox Code Playgroud)

mixins dart

4
推荐指数
1
解决办法
2417
查看次数